highcharts 在非单调数据的面积图中填充重叠部分的问题

iugsix8n  于 9个月前  发布在  Highcharts
关注(0)|答案(1)|浏览(80)
Highcharts.chart('container', {
  chart: {
    type: 'area'
  },
  plotOptions: {
    series: {
      connectNulls: false,
      // stacking: 'normal'
    }
  },
  
  series: [{
    fillOpacity: 0.75,
    data: [
      { x: 0, y: 29.9 },
      { x: 1, y: 71.5 },
      { x: 3, y: null },
      { x: 4.3, y: 129.2, color: 'red' },
      { x: null, y: null },
      { x: null, y: null },
      { x: 8, y: 216.0, color: 'yellow' },
      { x: 9, y: 135.6, color: 'purple' },
      { x: 7.2, y: 148.5, color: 'lime' },
      { x: 12, y: 216.4 },
      { x: 14, y: 194.1 }
    ]
  }]
});
<script src="https://code.highcharts.com/highcharts.js"></script>

<div id="container"></div>

我在绘制具有非单调数据的Highcharts面积图时遇到了麻烦。
在给定的例子中,我希望看到:

  • 红色区域也填充有蓝色
  • 黑色条纹区域可能暗示多个蓝色区域的重叠(使用不透明度或类似的方法)

看起来Highcharts使用了奇偶填充规则或类似的规则,但我无法确定或在手册中找到有关它的内容。

esyap4oy

esyap4oy1#

您遇到了Highcharts的一个常见限制:它不能保证正确显示未按X轴值排序的数据 *。
据我所知,实现您所寻求的视觉效果的最简单方法是定义多个系列,所有系列都按X轴值排序,但覆盖适当的组合区域。
将原始数据处理成多个系列是Highcharts调用者的责任,但粗略地说,我建议使用以下结构:
1.将您的原始数据分割成单调递增/递减的段,并具有重叠的边界值。
在您的示例中,序列[0,1,3,4.3,8,9,7.2,12,14]变为[0,1,3,4.3,8,9],[9,7.2],[7.2,12,14]。
1.对于递减的段,颠倒它们的顺序以遵守Highcharts的排序要求。
1.(可选)设置某些边界点的可见性,以便您不会在最终图表中呈现重复的工具提示(或图例项)。
潜在结果图表的演示如下(省略上述步骤3):

Highcharts.chart('container', {
  chart: {
    type: 'area'
  },
  plotOptions: {
    series: {
      connectNulls: false,
      color: '#2caffe'
    }
  },
  
  series: [{
    fillOpacity: 0.75,
    data: [
      { x: 0, y: 29.9 },
      { x: 1, y: 71.5 },
      { x: 3, y: null },
      { x: 4.3, y: 129.2, color: 'red' },
      { x: 5, y: null },
      { x: 8, y: 216.0, color: 'yellow' },
      { x: 9, y: 135.6, color: 'purple' },
    ]
  },{
    fillOpacity: 0.75,
    data: [
      { x: 7.2, y: 148.5, color: 'lime' },
      { x: 9, y: 135.6, color: 'purple' },
    ]
  },{
    fillOpacity: 0.75,
    data: [
      { x: 7.2, y: 148.5, color: 'lime' },
      { x: 12, y: 216.4 },
      { x: 14, y: 194.1 }
    ]
  }]
});
<script src="https://code.highcharts.com/highcharts.js"></script>

<div id="container"></div>

相关问题