<bdo id='nZT8L'></bdo><ul id='nZT8L'></ul>
      <tfoot id='nZT8L'></tfoot>
    1. <legend id='nZT8L'><style id='nZT8L'><dir id='nZT8L'><q id='nZT8L'></q></dir></style></legend>

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

      2. 具有区域范围的 Chart.js 折线图

        时间:2023-11-02
          <bdo id='gAgRx'></bdo><ul id='gAgRx'></ul>
            <tbody id='gAgRx'></tbody>

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

            • <tfoot id='gAgRx'></tfoot>
              1. <legend id='gAgRx'><style id='gAgRx'><dir id='gAgRx'><q id='gAgRx'></q></dir></style></legend>
                <i id='gAgRx'><tr id='gAgRx'><dt id='gAgRx'><q id='gAgRx'><span id='gAgRx'><b id='gAgRx'><form id='gAgRx'><ins id='gAgRx'></ins><ul id='gAgRx'></ul><sub id='gAgRx'></sub></form><legend id='gAgRx'></legend><bdo id='gAgRx'><pre id='gAgRx'><center id='gAgRx'></center></pre></bdo></b><th id='gAgRx'></th></span></q></dt></tr></i><div id='gAgRx'><tfoot id='gAgRx'></tfoot><dl id='gAgRx'><fieldset id='gAgRx'></fieldset></dl></div>

                  本文介绍了具有区域范围的 Chart.js 折线图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我想向

                  理想情况下,我可以提供一个数据集,其中包含一个类似于 data 的字段,用于指定某一点的线宽.

                  解决方案

                  您可以从折线图类型创建新的图表类型来执行此操作

                  <小时>

                  预览

                  <小时>

                  脚本

                  Chart.defaults.stripe = Chart.helpers.clone(Chart.defaults.line);Chart.controllers.stripe = Chart.controllers.line.extend({绘制:功能(轻松){var 结果 = Chart.controllers.line.prototype.draw.apply(this, arguments);//在我们完成动画之前不要渲染条纹if (!this.rendered && ease !== 1)返回;this.rendered = true;var helpers = Chart.helpers;var meta = this.getMeta();var yScale = this.getScaleForId(meta.yAxisID);var yScaleZeroPixel = yScale.getPixelForValue(0);var 宽度 = this.getDataset().width;var ctx = this.chart.chart.ctx;ctx.save();ctx.fillStyle = this.getDataset().backgroundColor;ctx.lineWidth = 1;ctx.beginPath();//初始化条带顶部的数据和贝塞尔控制点helpers.each(meta.data, function(point, index) {point._view.y += (yScale.getPixelForValue(widths[index]) - yScaleZeroPixel);});Chart.controllers.line.prototype.updateBezierControlPoints.apply(this);//绘制条纹的顶部helpers.each(meta.data, function(point, index) {如果(索引 === 0)ctx.moveTo(point._view.x, point._view.y);别的 {var previous = helpers.previousItem(meta.data, index);var next = helpers.nextItem(meta.data, index);Chart.elements.Line.prototype.lineToNextPoint.apply({_图表: {ctx:ctx}},[上一个,点,下一个,空,空])}});//恢复条带顶部的数据//初始化条纹底部的数据和贝塞尔控制点helpers.each(meta.data, function(point, index) {point._view.y -= 2 * (yScale.getPixelForValue(widths[index]) - yScaleZeroPixel);});//我们正在反向绘制点元数据反向();Chart.controllers.line.prototype.updateBezierControlPoints.apply(this);//绘制条纹的底部helpers.each(meta.data, function(point, index) {如果(索引 === 0)ctx.lineTo(point._view.x, point._view.y);别的 {var previous = helpers.previousItem(meta.data, index);var next = helpers.nextItem(meta.data, index);Chart.elements.Line.prototype.lineToNextPoint.apply({_图表: {ctx:ctx}},[上一个,点,下一个,空,空])}});//恢复条带底部的数据元数据反向();helpers.each(meta.data, function(point, index) {point._view.y += (yScale.getPixelForValue(widths[index]) - yScaleZeroPixel);});Chart.controllers.line.prototype.updateBezierControlPoints.apply(this);ctx.stroke();ctx.closePath();ctx.fill();ctx.restore();返回结果;}});

                  然后

                  <代码>...数据: ...,宽度:[12、4、5、13、12、2、19],...

                  <小时>

                  小提琴 - http://jsfiddle.net/u20cfpcd/

                  注意:乐队似乎存在间歇性问题,没有出现.注释掉 if (!this.rendered && ease !== 1) return 似乎可以解决这个问题.感谢@ClaudeBrisson 找出问题和解决方案!

                  I'd like to add another dimension to a Chart.js line chart, similar to the chart below, or this Highcharts example. I'm having difficulty understanding where I'd be able to implement such a feature, given Chart.js' myriad extension options.

                  Ideally, I'd be able to provide a dataset with a field similar to data specifying the width of the line at a certain point.

                  解决方案

                  You can create new chart type from the line chart type to do this


                  Preview


                  Script

                  Chart.defaults.stripe = Chart.helpers.clone(Chart.defaults.line);
                  Chart.controllers.stripe = Chart.controllers.line.extend({
                    draw: function(ease) {
                      var result = Chart.controllers.line.prototype.draw.apply(this, arguments);
                  
                      // don't render the stripes till we've finished animating
                      if (!this.rendered && ease !== 1)
                        return;
                      this.rendered = true;
                  
                  
                      var helpers = Chart.helpers;
                      var meta = this.getMeta();
                      var yScale = this.getScaleForId(meta.yAxisID);
                      var yScaleZeroPixel = yScale.getPixelForValue(0);
                      var widths = this.getDataset().width;
                      var ctx = this.chart.chart.ctx;
                  
                      ctx.save();
                      ctx.fillStyle = this.getDataset().backgroundColor;
                      ctx.lineWidth = 1;
                      ctx.beginPath();
                  
                      // initialize the data and bezier control points for the top of the stripe
                      helpers.each(meta.data, function(point, index) {
                        point._view.y += (yScale.getPixelForValue(widths[index]) - yScaleZeroPixel);
                      });
                      Chart.controllers.line.prototype.updateBezierControlPoints.apply(this);
                  
                      // draw the top of the stripe
                      helpers.each(meta.data, function(point, index) {
                        if (index === 0)
                          ctx.moveTo(point._view.x, point._view.y);
                        else {
                          var previous = helpers.previousItem(meta.data, index);
                          var next = helpers.nextItem(meta.data, index);
                  
                          Chart.elements.Line.prototype.lineToNextPoint.apply({
                            _chart: {
                              ctx: ctx
                            }
                          }, [previous, point, next, null, null])
                        }
                      });
                  
                      // revert the data for the top of the stripe
                      // initialize the data and bezier control points for the bottom of the stripe
                      helpers.each(meta.data, function(point, index) {
                        point._view.y -= 2 * (yScale.getPixelForValue(widths[index]) - yScaleZeroPixel);
                      });
                      // we are drawing the points in the reverse direction
                      meta.data.reverse();
                      Chart.controllers.line.prototype.updateBezierControlPoints.apply(this);
                  
                      // draw the bottom of the stripe
                      helpers.each(meta.data, function(point, index) {
                        if (index === 0)
                          ctx.lineTo(point._view.x, point._view.y);
                        else {
                          var previous = helpers.previousItem(meta.data, index);
                          var next = helpers.nextItem(meta.data, index);
                  
                          Chart.elements.Line.prototype.lineToNextPoint.apply({
                            _chart: {
                              ctx: ctx
                            }
                          }, [previous, point, next, null, null])
                        }
                  
                      });
                  
                      // revert the data for the bottom of the stripe
                      meta.data.reverse();
                      helpers.each(meta.data, function(point, index) {
                        point._view.y += (yScale.getPixelForValue(widths[index]) - yScaleZeroPixel);
                      });
                      Chart.controllers.line.prototype.updateBezierControlPoints.apply(this);
                  
                      ctx.stroke();
                      ctx.closePath();
                      ctx.fill();
                      ctx.restore();
                  
                      return result;
                    }
                  });
                  

                  and then

                  ...
                  data: ...,
                  width: [12, 4, 5, 13, 12, 2, 19],
                  ...
                  


                  Fiddle - http://jsfiddle.net/u20cfpcd/

                  Note: There seems to be an intermittent problem with the bands not appearing. Commmenting out if (!this.rendered && ease !== 1) return seems to fix this. Thanks @ClaudeBrisson for identifying the problem and solution!

                  这篇关于具有区域范围的 Chart.js 折线图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:如何将光标样式更改为悬停在图表点上的指针? 下一篇:是否可以使用 vue-chartjs 打印图表?

                  相关文章

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

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

                      <legend id='grHgG'><style id='grHgG'><dir id='grHgG'><q id='grHgG'></q></dir></style></legend>

                        <bdo id='grHgG'></bdo><ul id='grHgG'></ul>