<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 折线图

        Chart.js line chart with area range(具有区域范围的 Chart.js 折线图)
          <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 折线图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  ChartJS Version 3 - common legend for multiple line charts(ChartJS 版本 3 - 多个折线图的常用图例)
                  Charts.js scales yaxes ticks min max doesnt work(Charts.js 缩放 yaxes 刻度 min max 不起作用)
                  How to expand the slice of donut chart in chartjs?(如何在chartjs中扩展圆环图的切片?)
                  Chart.js yAxes Ticks stepSize not working (fiddle)(Chart.js yAxes Ticks stepSize 不起作用(小提琴))
                  Rounded corners on chartJS v.2 - bar charts (with negative values)(chartJS v.2 上的圆角 - 条形图(带负值))
                  How to hide value in Chart JS bar(如何在 Chart JS 栏中隐藏值)
                • <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>

                          <tbody id='grHgG'></tbody>

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