Highcharts 高阶跃同一x轴上的多个数据点

Highcharts 高阶跃同一x轴上的多个数据点,highcharts,highstock,Highcharts,Highstock,当highstock图表数据集在同一轴上有多个点时,例如: data: [[0,0], [0, 100], [1, 100], [1,200], [4, 100], [4, 200]] 默认情况下,点并不总是选择最大的数字。它看起来像是在同一个轴上随机选择一个数字 以下是我的小提琴手示例: 正如您在不同点上悬停时所看到的,它并不总是显示最高点的Y值。我如何让它只显示最高点的值 编辑:以下是我有多个相同x值的原因: 假设该行表示您在一段时间内存入帐户的金额。在行的图例中,我想显示您在查看期间的

当highstock图表数据集在同一轴上有多个点时,例如:

data:  [[0,0], [0, 100], [1, 100], [1,200], [4, 100], [4, 200]]
默认情况下,点并不总是选择最大的数字。它看起来像是在同一个轴上随机选择一个数字

以下是我的小提琴手示例:

正如您在不同点上悬停时所看到的,它并不总是显示最高点的Y值。我如何让它只显示最高点的值

编辑:以下是我有多个相同x值的原因:

假设该行表示您在一段时间内存入帐户的金额。在行的图例中,我想显示您在查看期间的存款金额。这将是最远点右侧的Y值减去最远点左侧的Y值。如果不包括重复的Y值,则此计算不正确

请参见更新的fiddler以在图例值上显示此错误(放大和缩小以更改图例值):


两个数据集看起来相同,但图例值不同,因为同一轴上的两个点都不显示。

我不确定步进图的用途,每个轴点应该只有一个值。 你可以做的是过滤你的数据,只保留每个点的最高值

data:  [[0,0], [0, 100], [1, 100], [1,200], [4, 100], [4, 200]]

for (var i in data) {
    if (filteredData[data[i][0]] == undefined) {
        filteredData[data[i][0]] = data[i]
    } else {
       if (filteredData[data[i][0]][1] < data[i][1]) {
       filteredData[data[i][0]] = data[i];
       }
    }
}
数据:[[0,0]、[0,100]、[1100]、[1200]、[4100]、[4200]]
用于(数据中的var i){
if(filteredData[data[i][0]]==未定义){
filteredData[data[i][0]]=data[i]
}否则{
if(filteredData[data[i][0]][1]
这是您编辑的过滤器,图表看起来与您所需的行为相同

编辑:

我做了一个变通办法,隐藏了未过滤的数据,使用过滤后的数据进行显示,并将其与未过滤的数据赋予相同的颜色,在计算差异的函数中,我使用了未过滤的数据(ch.series[0].data])


这是对您预期行为的摆弄

我不确定步进图的用途,每个轴点应该只有1个值。 你可以做的是过滤你的数据,只保留每个点的最高值

data:  [[0,0], [0, 100], [1, 100], [1,200], [4, 100], [4, 200]]

for (var i in data) {
    if (filteredData[data[i][0]] == undefined) {
        filteredData[data[i][0]] = data[i]
    } else {
       if (filteredData[data[i][0]][1] < data[i][1]) {
       filteredData[data[i][0]] = data[i];
       }
    }
}
数据:[[0,0]、[0,100]、[1100]、[1200]、[4100]、[4200]]
用于(数据中的var i){
if(filteredData[data[i][0]]==未定义){
filteredData[data[i][0]]=data[i]
}否则{
if(filteredData[data[i][0]][1]
这是您编辑的过滤器,图表看起来与您所需的行为相同

编辑:

我做了一个变通办法,隐藏了未过滤的数据,使用过滤后的数据进行显示,并将其与未过滤的数据赋予相同的颜色,在计算差异的函数中,我使用了未过滤的数据(ch.series[0].data])


这是对你预期行为的摆弄

我会处理数据,因此你每x值有一个点,还有其他信息-多个值。我将
{x,y}
视为关于该点应如何可视化的信息,并将数组与允许进行适当计算的所有附加值相加

这:

[
  [0, 0],
  [0, 100],
  [1, 100],
  [1, 200],
  [1, 300],
变成这样:

[{
  x: 0,
  y: 100,
  values: [0, 100]
}, {
  x: 1,
  y: 300,
  values: [100, 200, 300]
}]
对于上述定义的点,您可以通过
point.options.values
访问值并计算差值


示例:

我将处理数据,因此每x值有一个点,并带有附加信息-多个值。我将
{x,y}
视为关于该点应如何可视化的信息,并将数组与允许进行适当计算的所有附加值相加

这:

[
  [0, 0],
  [0, 100],
  [1, 100],
  [1, 200],
  [1, 300],
变成这样:

[{
  x: 0,
  y: 100,
  values: [0, 100]
}, {
  x: 1,
  y: 300,
  values: [100, 200, 300]
}]
对于上述定义的点,您可以通过
point.options.values
访问值并计算差值


示例:

同意Liviu Boboia的回答。为什么需要这些额外的点?我有一个额外的要求来计算最右边和最左边点之间的差值(以查看值随时间的变化)。见我对利维乌帖子的评论。同意利维乌的回答。为什么需要这些额外的点?我有一个额外的要求来计算最右边和最左边点之间的差值(以查看值随时间的变化)。请参阅我对Liviu帖子的评论。请参阅更新的问题,了解为什么每个轴点需要超过1个值。请参阅更新的问题,了解为什么每个轴点需要超过1个值。