首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chart.js阴影区

Chart.js阴影区
EN

Stack Overflow用户
提问于 2016-01-18 17:10:01
回答 1查看 4.5K关注 0票数 3

Chart.js (http://www.chartjs.org/docs/)可以使用"fillColor“属性(填充直线图本身与x轴之间的区域)填充线下的颜色。

我想知道的是,是否可以将Chart.js配置为创建阴影区域,如下所示:

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

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-01-20 14:33:04

线图的阴影区域

您可以扩展图表来完成此操作。

预览

脚本

代码语言:javascript
复制
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;
    }
});

然后

代码语言:javascript
复制
...
new Chart(ctx).LineAlt(data);

如果你想要遮荫整个背景使用

代码语言:javascript
复制
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();
}

而不是this.datasets[0].fillColor = gradient;

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

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34860311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档