Chart.js 阴影区域 [英] Chart.js shaded regions

查看:32
本文介绍了Chart.js 阴影区域的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Chart.js (

<小时>

脚本

Chart.types.Line.extend({name: "LineAlt",初始化:函数(数据){Chart.types.Line.prototype.initialize.apply(this, arguments);变量范围 = [{开始:100,结束: 75,颜色:'RGBA(250,0,0,0.5)'},{开始:75,结束: 50,颜色:'RGBA(0,250,0,0.5)'},{开始:50,结束: 25,颜色:'RGBA(0,0,250,0.5)'},{开始:25,结束: 0,颜色:'RGBA(250,250,0,0.5)'}];var scale = this.scale;var rangeStart = scale.calculateY(ranges[0].start);var rangeEnd = scale.calculateY(ranges[ranges.length - 1].end);var梯度 = this.chart.ctx.createLinearGradient(0, rangeStart, 0, rangeEnd);range.forEach(函数(范围){gradient.addColorStop((scale.calculateY(range.start) -rangesStart)/(rangesEnd -rangesStart), range.color);gradient.addColorStop((scale.calculateY(range.end) -rangesStart)/(rangesEnd -rangesStart), range.color);})this.datasets[0].fillColor = 渐变;}});

然后

<代码>...新图表(ctx).LineAlt(数据);

<小时>

如果你想对整个背景进行着色,请使用

var originalDraw = scale.draw;scale.draw = 函数(){originalDraw.apply(this, arguments);ctx.save();ctx.fillStyle = 渐变;ctx.fillRect(scale.calculateX(0), scale.startPoint, scale.width, scale.endPoint - scale.startPoint);ctx.restore();}

代替this.datasets[0].fillColor = gradient;

<小时>

小提琴(下线) - http://jsfiddle.net/61vg048r/

小提琴(整个背景) - http://jsfiddle.net/u4Lk7xns/

Chart.js (http://www.chartjs.org/docs/) can fill the color below line charts using the "fillColor" attribute (filling the region between the line chart itself and the x-axis).

What I'd like to know is whether Chart.js can be configured to create shaded regions such as the one shown below:

http://peltiertech.com/Excel/pix5/HorizBands09.png

Thank you.

解决方案

Shaded Regions for Line Charts

You can extend the chart to do this.


Preview

or


Script

Chart.types.Line.extend({
    name: "LineAlt",
    initialize: function (data) {
        Chart.types.Line.prototype.initialize.apply(this, arguments);

        var ranges = [
            {
                start: 100,
                end: 75,
                color: 'rgba(250,0,0,0.5)'
            },
            {
                start: 75,
                end: 50,
                color: 'rgba(0,250,0,0.5)'
            },
            {
                start: 50,
                end: 25,
                color: 'rgba(0,0,250,0.5)'
            },
            {
                start: 25,
                end: 0,
                color: 'rgba(250,250,0,0.5)'
            }
        ];

        var scale = this.scale;
        var rangesStart = scale.calculateY(ranges[0].start);
        var rangesEnd = scale.calculateY(ranges[ranges.length - 1].end);
        var gradient = this.chart.ctx.createLinearGradient(0, rangesStart, 0, rangesEnd);

        ranges.forEach(function (range) {
            gradient.addColorStop((scale.calculateY(range.start) - rangesStart) / (rangesEnd - rangesStart), range.color);
            gradient.addColorStop((scale.calculateY(range.end) - rangesStart) / (rangesEnd - rangesStart), range.color);
        })

        this.datasets[0].fillColor = gradient;
    }
});

and then

...
new Chart(ctx).LineAlt(data);


If you want to shade the whole background use

var originalDraw = scale.draw;
scale.draw = function() {
    originalDraw.apply(this, arguments);

  ctx.save();
  ctx.fillStyle = gradient;
  ctx.fillRect(scale.calculateX(0), scale.startPoint, scale.width, scale.endPoint - scale.startPoint);
  ctx.restore();
}

instead of this.datasets[0].fillColor = gradient;


Fiddle (below line) - http://jsfiddle.net/61vg048r/

Fiddle (whole background) - http://jsfiddle.net/u4Lk7xns/

这篇关于Chart.js 阴影区域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆