在HighCharts中的列图中的曲线图上方和下方更改图形颜色



i有一个带有两个图形的图形。我需要在越过每个绘图线后用不同的颜色为列的部分着色。但是区域使不同的列不同颜色,而不是图中上方的部分。我尝试了区域&阈值但没有任何解决方案列图表。

有针对行图的解决方案,但它们不适用于列图。

Highcharts.chart('container', {
                    chart: {
                        zoomType: 'xy',
                        events: {
                            load: function () {
                                this.myTooltip = new Highcharts.Tooltip(this, this.options.tooltip);
                            }
                        }
                    },
                    title: {
                        text: ''
                    },
                    credits: {
                        enabled: false
                    },
                    subtitle: {
                        text: ''
                    },
                    useUTC: false,
                    xAxis: [{
                        type: 'datetime',
                        dateTimeLabelFormats: {
                            day: '%e %b',
                            hour: '%I:%M %P'
                        }
                    }],
                    yAxis: [{ // Primary yAxis
                        labels: {
                            format: '{value:,.0f}',
                            style: {
                                color: Highcharts.getOptions().colors[1]
                            }
                        },
                        plotLines: [peakPlotLineOption, averagePlotLineOption],
                        title: {
                            text: 'Consumption (kWh)',
                            style: {
                                color: Highcharts.getOptions().colors[1]
                            }
                        }}
                    , { // Secondary yAxis
                        title: {
                            text: '',
                            style: {
                                color: Highcharts.getOptions().colors[0]
                            }
                        },
                        labels: {
                            format: '{value} kWh',
                            style: {
                                color: Highcharts.getOptions().colors[0]
                            }
                        },
                        visible: false
                    }],
        tooltip: { 
            crosshairs: true,
            shared: true,
            valueSuffix: '°C'
        },
                    series: [{
                        name: 'ABC',
                        type: 'column',
                        data: 
                         [
                         { x: Date.UTC(2017, 6, 2, 0), y: 49.9,  bId: 1 },
                         { x: Date.UTC(2017, 6, 2, 1), y: 71.5,  bId: 2 },
                         { x: Date.UTC(2017, 6, 2, 2), y: 106.4,  bId: 3 },
                         { x: Date.UTC(2017, 6, 2, 3), y: 129.2,  bId: 4 },
                         { x: Date.UTC(2017, 6, 2, 4), y: 144.0,  bId: 5 },
                         { x: Date.UTC(2017, 6, 2, 5), y: 176.0,  bId: 6 },
                         { x: Date.UTC(2017, 6, 2, 6), y: 135.6, bId: 7 },
                         { x: Date.UTC(2017, 6, 2, 7), y: 148.5,  bId: 8 },
                         { x: Date.UTC(2017, 6, 2, 8), y: 216.4,  bId: 9 },
                         { x: Date.UTC(2017, 6, 2, 9), y: 194.1,  bId: 10 },
                         { x: Date.UTC(2017, 6, 2, 10), y: 95.6,  bId: 11 },
                         { x: Date.UTC(2017, 6, 2, 11), y: 54.4,  bId: 12 },
                         { x: Date.UTC(2017, 6, 2, 12), y: 45, bId: 13 },
                         { x: Date.UTC(2017, 6, 2, 13), y: 62,  bId: 14 },
                         { x: Date.UTC(2017, 6, 2, 14), y: 35,  bId: 15 }
                         ], 
                        tooltip: {
                            valueSuffix: ' kWh'
                        },
                        yAxis: 0,
                       zones: [{
                                value: 50,
                                color: '#90ed7d'
                              }, {
                                value: 100,
                                color: '#FFDE00'
                              },{
                                color: '#CE0000'
                              }]
                   }
                    , {
                        // Series that mimics the plot line
                        color: '#ee8176',
                        name: 'contract capacity',
                        dashStyle: 'Solid',
                        marker: {
                            enabled: false
                        },
                        events: {
                            legendItemClick: function (e) {
                                if (this.visible) {
                                    this.chart.yAxis[0].removePlotLine(averagePlotLine);
                                }
                                else {
                                    this.chart.yAxis[0].addPlotLine(averagePlotLineOption);
                                }
                            }
                        },
                        yAxis: 0
                    }, {
                        // Series that mimics the plot line
                        color: '#9fa7b1',
                        name: 'max demand',
                        dashStyle: 'Solid',
                        marker: {
                            enabled: false
                        },
                        events: {
                            legendItemClick: function (e) {
                                if (this.visible) {
                                    this.chart.yAxis[0].removePlotLine(peakPlotLine);
                                }
                                else {
                                    this.chart.yAxis[0].addPlotLine(peakPlotLineOption);
                                }
                            }
                        },
                        yAxis: 0
                    }               
                ]
                });

jsfiddle colulmn图表

默认情况下HighCharts不支持这种着色。

解决方法是使用stacking机构模拟区域,并将一个点分为反射区域的多个点。每个系列都包含一个区域的点:

var zones = [{
  color: 'green',
  start: 0
}, {
  color: 'yellow',
  start: 30
}, {
  color: 'red',
  start: 80
}];
//(...)
function prepareSeries(series) {
  var newSeries = [],
    data = series.data;
  series.data = [];
  // create separate series for each zone
  zones.forEach(function(z, i) {
    newSeries.push({
      data: []
    }); // copy series properties
  });
  // create new points and add them to new series array
  data.forEach(function(p) {
    for (var i = 0; i < zones.length; i++) {
      var currentZone = zones[i],
        nextZone = zones[i + 1],
        zoneSeries = newSeries[i];
      zoneSeries.color = currentZone.color;
      if (nextZone && p.y > nextZone.start) {
        zoneSeries.data.push({
          x: p.x,
          y: nextZone.start - currentZone.start
        });
      } else if (p.y > currentZone.start) {
        zoneSeries.data.push({
          x: p.x,
          y: p.y - currentZone.start
        });
      }
    }
  });
  newSeries.reverse();
  // one legend for all created series
  for (var i = 1; i < newSeries.length; i++) {
    newSeries[i].linkedTo = ':previous';
  }
  return newSeries;
}

实时演示: http://jsfiddle.net/kkulig/g777od3wr/

linkedTo导致所有系列都连接(只有一个传奇项目)。tooltip.shared: truetooltipFormater用于还原工具提示的先前格式(总价值而不是列出的所有系列)。

最新更新