1. <legend id='PtYCO'><style id='PtYCO'><dir id='PtYCO'><q id='PtYCO'></q></dir></style></legend>

      <small id='PtYCO'></small><noframes id='PtYCO'>

      <i id='PtYCO'><tr id='PtYCO'><dt id='PtYCO'><q id='PtYCO'><span id='PtYCO'><b id='PtYCO'><form id='PtYCO'><ins id='PtYCO'></ins><ul id='PtYCO'></ul><sub id='PtYCO'></sub></form><legend id='PtYCO'></legend><bdo id='PtYCO'><pre id='PtYCO'><center id='PtYCO'></center></pre></bdo></b><th id='PtYCO'></th></span></q></dt></tr></i><div id='PtYCO'><tfoot id='PtYCO'></tfoot><dl id='PtYCO'><fieldset id='PtYCO'></fieldset></dl></div>
        <bdo id='PtYCO'></bdo><ul id='PtYCO'></ul>

        <tfoot id='PtYCO'></tfoot>

        如何使用charts.js在折线图中绘制单个值?

        时间:2023-11-01

          <small id='DJS0D'></small><noframes id='DJS0D'>

            <bdo id='DJS0D'></bdo><ul id='DJS0D'></ul>
            <legend id='DJS0D'><style id='DJS0D'><dir id='DJS0D'><q id='DJS0D'></q></dir></style></legend>
              <tfoot id='DJS0D'></tfoot>

                    <tbody id='DJS0D'></tbody>
                  <i id='DJS0D'><tr id='DJS0D'><dt id='DJS0D'><q id='DJS0D'><span id='DJS0D'><b id='DJS0D'><form id='DJS0D'><ins id='DJS0D'></ins><ul id='DJS0D'></ul><sub id='DJS0D'></sub></form><legend id='DJS0D'></legend><bdo id='DJS0D'><pre id='DJS0D'><center id='DJS0D'></center></pre></bdo></b><th id='DJS0D'></th></span></q></dt></tr></i><div id='DJS0D'><tfoot id='DJS0D'></tfoot><dl id='DJS0D'><fieldset id='DJS0D'></fieldset></dl></div>
                  本文介绍了如何使用charts.js在折线图中绘制单个值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我需要在折线图中绘制单个值.目前我正在使用charts.JS 库进行折线图.

                  I need to plot a single value in line chart. Currently i am using charts.JS library for line graph purpose.

                  数据有时会发生变化,我会在数据集中获取单个数据,那时我需要在折线图中用线条绘制单个值.

                  The data will be varied some times i'll get the single data inside the data set at that time i need to plot the single value with line in the line chart.

                  我尝试使用charts.js 注释插件,但它不符合我的要求.这就像它与图形区域中的绘制点重叠.

                  I tried with the charts.js annotation plugin but it wasn't met my requirements. which is like it wis overlapping the plotted point in the graph area.

                  我尝试过的代码

                  createLineChart() {
                     this.lineChart = new Chart(this.lineCanvas.nativeElement, {
                        type: "line",
                  
                        data: {
                          labels:[],
                  
                          datasets: [
                            {
                              fill: false,
                  
                              backgroundColor: "#0168FF",
                              borderColor: "#0168FF",
                              pointBackgroundColor: "white", // wite point fill
                              pointBorderWidth: 1, // point border width
                              lineTension: 0,
                              pointBorderColor: "blue",
                              pointRadius: 4,
                            },
                          ],
                        },
                        options: {
                          scales: {
                            yAxes: [
                              {
                                ticks: {
                                  padding: 20,
                                  beginAtZero: true,
                                  min: 0,
                  
                                  stepSize: 100,
                                },
                                gridLines: {
                                  drawBorder: false,
                                },
                              },
                            ],
                            xAxes: [
                              {
                               // offset: true,
                                ticks: {
                                  display: false,
                                 //beginAtZero: true,
                                 min: 0,
                  
                                },
                                gridLines: {
                                  zeroLineColor: "transparent",
                                  drawBorder: false,
                                  display: false,
                                },
                                //offset:true, 
                              },
                            ],
                            legend: {
                              display: false,
                            },
                            tooltips: {
                              enabled: false,
                            },
                          },
                            drawTime: "afterDraw", // (default)
                          } as ChartOptions,
                         // plugins: [ChartAnnotation]
                        },
                      });
                    }
                  

                  生成动态数据并在图形区域中绘制.

                  To generate dynamic data and plot in the graph area.

                  generateRandomDataSet(size) {
                      let yaxisArr = [];
                      let xaxisArr = [];
                      let random_data:any = this.getRandomData(size)
                      let maxYTickVal = Math.max.apply(Math, random_data.map((val) => {return val.yaxis}));
                      let maxVal = Math.ceil((maxYTickVal+1) / 10) * 10
                  
                      for(let data of random_data) {
                        yaxisArr.push(data.yaxis)
                        xaxisArr.push(data.xaxis)
                      }
                  
                  
                  
                      console.log("X-Axis array values : "+xaxisArr)
                      console.log("Y-Axis array values : "+yaxisArr)
                      this.lineChart.data.datasets[0].data = yaxisArr
                      this.lineChart.config.data.labels = []
                      this.lineChart.config.data.labels = xaxisArr
                      this.lineChart.config.options.scales.yAxes[0].ticks.max =maxVal
                      this.lineChart.config.options.scales.yAxes[0].ticks.stepSize = maxVal/2
                  
                  
                      this.lineChart.update()
                    }
                  
                  getRandomData(arraySize) {
                    let data = []
                    for(var i=1; i<=arraySize; i++) {
                      let number = Math.floor(Math.random() * 200) + 1
                      data.push({'xaxis':i,'yaxis':number})
                    }
                    return data
                    } 
                  

                  上面的代码我越来越喜欢

                  with the above code i am getting like

                  我需要什么

                  推荐答案

                  你可以定义一个 animation.onComplete 函数如下绘制线,以防存在单个数据值.

                  You can define an animation.onComplete function as follows to draw the line in case a single data value is present.

                  animation: {
                    onComplete: e => {
                      var ctx = chart.chart.ctx;
                      var data =  chart.config.data.datasets[0].data;
                      if (data[0] == null) {
                        var xAxis = chart.scales['x-axis-0'];
                        var yAxis = chart.scales['y-axis-0']; 
                        var y = yAxis.getPixelForValue(data[1]);         
                        ctx.save();           
                        ctx.globalCompositeOperation='destination-over';
                        ctx.strokeStyle = 'blue'          
                        ctx.lineWidth = 2;
                        ctx.beginPath();
                        ctx.moveTo(xAxis.left, y);             
                        ctx.lineTo(xAxis.right, y);
                        ctx.stroke();
                        ctx.restore();       
                      }    
                    }
                  },
                  

                  这个函数期望 data 数组的格式为 [null, <value>, null] 以防存在单个值,否则很难将数据点水平居中(请参阅此答案).您可以更改 generateRandomDataSet() 函数以使其提供此类数据.

                  This function expects the data array to be of format [null, <value>, null] in case a single value is present, otherwise it will be hard to horizontally center the data point (see this answer). It's up to you to change the generateRandomDataSet() function in a way that it provides such data.

                  请在下面查看您更改的代码.

                  Please have a look at your changed code below.

                  const chart = new Chart('line-chart', {
                    type: "line",
                    data: {
                      labels: ['', 'A', ''],
                      datasets: [{
                        data: [null, 120, null],
                        fill: false,
                        backgroundColor: "#0168FF",
                        borderColor: "#0168FF",
                        pointBackgroundColor: "white",
                        pointBorderWidth: 1,
                        lineTension: 0,
                        pointBorderColor: "blue",
                        pointRadius: 4,
                      }],
                    },
                    options: {
                      legend: {
                        display: false
                      },
                      tooltips: {
                        enabled: false
                      },
                      animation: {
                        onComplete: e => {
                          var ctx = chart.chart.ctx;
                          var data =  chart.config.data.datasets[0].data;
                          if (data[0] == null) {
                            var xAxis = chart.scales['x-axis-0'];
                            var yAxis = chart.scales['y-axis-0']; 
                            var y = yAxis.getPixelForValue(data[1]);         
                            ctx.save();           
                            ctx.globalCompositeOperation='destination-over';
                            ctx.strokeStyle = 'blue'          
                            ctx.lineWidth = 2;
                            ctx.beginPath();
                            ctx.moveTo(xAxis.left, y);             
                            ctx.lineTo(xAxis.right, y);
                            ctx.stroke();
                            ctx.restore();       
                          }    
                        }
                      },
                      scales: {
                        yAxes: [{
                          ticks: {
                            padding: 20,
                            min: 0,
                            stepSize: 100
                          },
                          gridLines: {
                            drawBorder: false
                          }
                        }],
                        xAxes: [{
                          ticks: {
                            display: false
                          },
                          gridLines: {
                            zeroLineColor: "transparent",
                            drawBorder: false,
                            display: false
                          }
                        }]      
                      }
                    }
                  });

                  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
                  <canvas id="line-chart" height="80"></canvas>

                  这篇关于如何使用charts.js在折线图中绘制单个值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:React-Chart.js 图例 onClick 函数 下一篇:ChartJS 3 不显示图例

                  相关文章

                  1. <legend id='ddUow'><style id='ddUow'><dir id='ddUow'><q id='ddUow'></q></dir></style></legend>
                  2. <small id='ddUow'></small><noframes id='ddUow'>

                  3. <tfoot id='ddUow'></tfoot>
                      <bdo id='ddUow'></bdo><ul id='ddUow'></ul>
                    <i id='ddUow'><tr id='ddUow'><dt id='ddUow'><q id='ddUow'><span id='ddUow'><b id='ddUow'><form id='ddUow'><ins id='ddUow'></ins><ul id='ddUow'></ul><sub id='ddUow'></sub></form><legend id='ddUow'></legend><bdo id='ddUow'><pre id='ddUow'><center id='ddUow'></center></pre></bdo></b><th id='ddUow'></th></span></q></dt></tr></i><div id='ddUow'><tfoot id='ddUow'></tfoot><dl id='ddUow'><fieldset id='ddUow'></fieldset></dl></div>