【问题标题】:How to feed two values to y axis at a time corresponds to single x axis value in Highchart如何一次将两个值输入 y 轴对应于 Highchart 中的单个 x 轴值
【发布时间】:2018-07-05 19:58:30
【问题描述】:

我的要求是使用 X 和 Y 轴绘制 Highchart。 x 轴显示年份,y 轴显示以百万为单位的相应数量。

对于 1966 年,我希望看到我的图表首先遍历到 2396,然后到 435,然后才应该转到下一年 1968,它的值再次为 435。请查看我的评论行 (// y: (2396, 435) 这对我不起作用。请帮助使用 Highchart 解决此问题。

下面是我的代码,你可以直接复制到https://jsfiddle.net/y0kqsrav/编辑器并执行。

Highcharts.chart('container', {
    chart: {
        type: 'areaspline'
    },
    title: {
        text: 'Historic and Estimated Worldwide Population Growth by Region'
    },
    subtitle: {
        text: 'Source: Wikipedia.org'
    },
    xAxis: {
        categories: ['1964', '1966', '1968', '1970'],

        title: {
            enabled: false
        }
    },
    yAxis: {
        title: {
            text: 'Billions'
        },
        labels: {
            formatter: function () {
                return this.value / 100;
            }
        }
    },
    tooltip: {
        split: true,
        valueSuffix: ' millions'
    },
    plotOptions: {
        areaspline: {

            stacking: 'areaspline',
            lineColor: '#666666',
            lineWidth: 1,
            marker: {
                lineWidth: 1,
                lineColor: '#666666',

            }
        }
    },
    series: [{
        name: 'USA',
        data: [
        {
          x: 1964,
          y: 2416
        },
        {
          x: 1966,
          y: 2396
         // y: (2396, 435),
        },
        {
          x: 1968,
          y: 435
        },
        {
          x: 1970,
          y: 223
        }
        ]
    }]
});

【问题讨论】:

    标签: javascript highcharts highcharts-ng


    【解决方案1】:

    为 1966 年添加另一个数据点

    { x: 1966, 是:435 },

    并移除堆叠。

    Highcharts.chart('container', {
        chart: {
            type: 'areaspline'
        },
        title: {
            text: 'Historic and Estimated Worldwide Population Growth by Region'
        },
        subtitle: {
            text: 'Source: Wikipedia.org'
        },
        xAxis: {
            categories: ['1964', '1966', '1968', '1970'],
    
            title: {
                enabled: false
            }
        },
        yAxis: {
            title: {
                text: 'Billions'
            },
            labels: {
                formatter: function () {
                    return this.value / 100;
                }
            }
        },
        tooltip: {
            split: true,
            valueSuffix: ' millions'
        },
        plotOptions: {
            areaspline: {
    
        //        stacking: 'areaspline',
                lineColor: '#666666',
                lineWidth: 1,
                marker: {
                    lineWidth: 1,
                    lineColor: '#666666',
    
                }
            }
        },
        series: [{
            name: 'USA',
            data: [
            {
              x: 1964,
              y: 2416
            },
            {
              x: 1966,
              y: 2396
             // y: (2396, 435),
            },
            {
              x: 1966,
              y: 435
            },
            {
              x: 1968,
              y: 435
            },
            {
              x: 1970,
              y: 223
            }
            ]
        }]
    });
    

    https://jsfiddle.net/y0kqsrav/112/

    【讨论】:

    • 您好,非常感谢您的回答。但我希望看到我的图表弯曲。由于我们删除了堆叠 - 图表看起来是方形的。但我的严格要求是让它弯曲。如果有机会可以帮忙吗?
    • 或者换句话说,我需要看到图形中的所有角都是弯曲的形状。请建议
    • 您可以使用 1965.5 和 1966.5 来获得曲线而不是急剧下降。但是,如果数据确实是那一年的价值下降,那么直角是有道理的。
    • 嗨,使用您的输入 - 我在这里提供我的项目后端动态生成的实时数据。如果我取消注释注释行([Date.UTC(2018, 11, 29), 80000000],) 那么我的图表会生成方形图表。而且我不确定在这种情况下是否可以使用与您提到的 1965.5 和 1966.5 类似的逻辑,因为它会更改在运行时作为输入给出的实际日期。任何关于如何实现这一点来绘制曲线图的建议(我的意思是所有的角都不能是尖锐的正方形)。 jsfiddle.net/y0kqsrav/169
    • jsfiddle.net/y0kqsrav/170 在此示例中 - 灰色方形区域是现有贷款,天蓝色区域是新贷款。在这张图表中,我们有 3 个方角。我的要求是在不实际修改 X 轴上的实际日期的情况下看到所有三个角都弯曲。提前致谢
    【解决方案2】:

    使用类别时,点的x 坐标对应于类别index。因此,您应该像这样定义数据以实现所需的行为:

    xAxis: {
        categories: ['1964', '1966', '1968', '1970'],
    
    (...)
    
      series: [{
        name: 'USA',
        data: [{
            x: 0,
            y: 2416
          },
          {
            x: 1.7, // move it a little bit to the left
            y: 2396
          },
          {
            x: 2.3, // move it a little bit to the right
            y: 435
          },
          {
            x: 4,
            y: 435
          },
          {
            x: 6,
            y: 223
          }
        ]
      }]
    

    现场演示:http://jsfiddle.net/BlackLabel/54s2tcbr/

    【讨论】:

    • 嗨,使用您的输入 - 我在这里提供我的项目后端动态生成的实时数据。如果我取消注释注释行([Date.UTC(2018, 11, 29), 80000000],) 那么我的图表会生成方形图表。而且我不确定在这种情况下是否可以使用与您提到的 x 轴类似的逻辑,因为它会更改在运行时作为输入给出的实际日期。任何关于如何实现这一点来绘制曲线图的建议(我的意思是所有的角都不能是尖锐的正方形)。 jsfiddle.net/y0kqsrav/169
    • 你可以在这里做一个小技巧:在图表上显示一点移动点并在工具提示中显示实际值(使用tooltip.formatter):jsfiddle.net/BlackLabel/zx9r7psL
    • 是的,这是真的,但不幸的是,它显示了两点之间的一些差异 - 业务团队不接受它。 :( 我仍在尝试是否有任何方法可以在不玩日期的情况下制作曲线形状。如果您有任何想法,也许您也可以提供帮助。感谢您的积极建议。
    • 恐怕没有简单的解决方案。问题非常复杂 - 您需要一种新算法来生成序列路径(样条序列不符合您的要求)。您可以创建一个新的系列类型 - 以样条系列为例说明如何操作:github.com/highcharts/highcharts/blob/master/js/parts/… 如您所见,样条系列只实现了一个功能:getPointSpline。
    • 当然。会试试这个。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 2016-10-27
    相关资源
    最近更新 更多