【问题标题】:Chart.js (Radar Chart) different scaleLineColor for each scaleLineChart.js(雷达图)每个 scaleLine 的不同 scaleLineColor
【发布时间】:2015-10-15 05:37:45
【问题描述】:

我想尝试使用 Chart.js 创建一个雷达图,它为每个 scaleLine 提供各种颜色,或者在 scaleLines 之间着色。我想知道这是否可能?

发件人:

收件人:

我目前有一个工作图,但似乎没有改变单个比例线的方法。

亲切的问候 利

【问题讨论】:

    标签: javascript chart.js


    【解决方案1】:

    你可以扩展雷达图类型来做到这一点,像这样

    Chart.types.Radar.extend({
        name: "RadarAlt",
        initialize: function (data) {
            Chart.types.Radar.prototype.initialize.apply(this, arguments);
    
            var originalScaleDraw = this.scale.draw;
            var ctx = this.chart.ctx;
            this.scale.draw = function () {
                var lineWidth = this.lineWidth;
                // this bypasses the line drawing in originalScaleDraw
                this.lineWidth = lineWidth;
    
                originalScaleDraw.apply(this, arguments);
    
                ctx.lineWidth = this.lineWidth;
                var scale = this;
                // now we draw
                Chart.helpers.each(scale.yLabels, function (label, index) {
                    // color of each radial line - you could replace this by an array lookup (if you limit your scaleSteps)
                    ctx.strokeStyle = "hsl(" + index / scale.yLabels.length * 360 + ", 80%, 70%)";
    
                    // copy of the chart.js code
                    ctx.beginPath();
                    for (var i = 0; i < scale.valuesCount; i++) {
                        pointPosition = scale.getPointPosition(i, scale.calculateCenterOffset(scale.min + (index * scale.stepValue)));
                        if (i === 0) {
                            ctx.moveTo(pointPosition.x, pointPosition.y);
                        } else {
                            ctx.lineTo(pointPosition.x, pointPosition.y);
                        }
                    }
                    ctx.closePath();
                    ctx.stroke();
                });
            }
        }
    });
    

    然后这样称呼它

    var ctx = document.getElementById("myChart").getContext("2d");
    var myRadarChart = new Chart(ctx).RadarAlt(data, {
        scaleLineWidth: 10
    });
    
    // this is requried if you have animation: false
    // myRadarChart.update();
    

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


    当然,理智的事情是改变亮度值而不是色调值:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多