【问题标题】:Highcharts more than one seriesHighcharts 不止一个系列
【发布时间】:2017-09-27 16:44:08
【问题描述】:

我有一个简单的 json 文档:

 [ {
  "x" : "a",
  "y" : 2
}, {
  "x" : "b",
  "y" : 8
}, {
  "x" : "c",
  "y" : 4
}, {
  "x" : "d",
  "y" : 15
} ]

我想使用具有 4 个系列的 Highcharts 对其进行可视化。我可以成功,但是,数据仅显示为一个系列(请参见下图)。

下面是部分代码:

  var options = {
.
.
.
 series: [{ }]
};

.
.
.
var data = JSON.parse(json);

 var seriesData = [];  
for (var i = 0; i < data.length; i++) { 
    seriesData.push([data[i].x, data[i].y]); 
    options.xAxis.categories.push( data[i].x ); 
}

  options.series[0].data = seriesData;
  var chart = new Highcharts.Chart(options);  

同时更新系列

chart.series[0].update({ 
              type: type, 
            });

工作正常。

使用

 options.series.push({name: data[i].x, data: [data[i].x, data[i].y]}); 

创建了 4 个系列,但没有适当地可视化并更新系列

chart.series[0].update({ 
          type: type, 
        });

不起作用,因此,我想专注于第一个提到的方法。

有什么提示吗?

编辑:部分适用于我的代码:

    var options = {
            chart: {
                renderTo: 'container',
                type: 'column'   //default

            },
            title: {
                text: ''
            },

            yAxis: {
                title: {
                    enabled: true,
                    text: 'Count',
                    style: {
                        fontWeight: 'normal'
                    }
                }
            },

            xAxis: {
                title: {
                    enabled: true,
                    text: '',
                    style: {
                        fontWeight: 'normal'
                    }
                },
                categories: [],
                crosshair: true
            } ,

            plotOptions: {
                pie: {
                    innerSize: 125,
                    depth: 80
                },
                column: {
                    pointPadding: 0.2,
                    borderWidth: 0,
                     grouping: false
                }  

            },   
             series: [{  }]
        };


// Set type
$.each(['column', 'pie'], function (i, type) {
    $('#' + type).click(function () { 


  chart.series[0].update({ 
                  type: type 
        }); 

 });



 var data = get the data fom json file**

 var seriesData = [];  
for (var i = 0; i < data.length; i++) { 
    seriesData.push([data[i].x, data[i].y]); 
   options.xAxis.categories.push( data[i].x ); 


}

  options.series[0].data = seriesData;
 var chart = new Highcharts.Chart(options);  

    });

});

【问题讨论】:

    标签: highcharts visualization series


    【解决方案1】:

    您必须决定是要拥有 4 个不同的系列并一次更新所有 4 个系列,还是要拥有一个系列然后构建,例如自己的传奇。

    如果你想有 4 个系列,将分组设置为 false,设置 xAxis 类别,每个点应该映射到一个带有一个点的系列 - point.x 应该有系列的索引。

    const series = data.map((point, x) => ({ name: point.x, data: [{ x, y: point.y }]}))
    
    const chart = Highcharts.chart('container', {
      chart: {
        type: 'column'
      },
      plotOptions: {
        column: {
          grouping: false
        }
      },
      xAxis: {
        categories: data.map(point => point.x)
      },
      series: series
    });
    

    然后你可以更新你所有的 4 个系列:

      chart.series.forEach(series => series.update({
        type: series.type === 'column' ? 'scatter' : 'column'
      }, false))
    
      chart.redraw()
    

    示例:http://jsfiddle.net/pdjqrj5y/

    【讨论】:

    • 谢谢。不幸的是,我在某个特殊平台下运行脚本,您的代码不能在该平台下运行。我已经上传了与您相同的库,但没有成功。我用适合我的代码更新了我的问题。也许您可以检查并告诉我如何为列类型设置 4 个系列。对于馅饼,它工作正常。
    • 您可以使用 babel transpiler 将代码转译为旧版本的 ES,它将在旧环境中运行 - 在此处粘贴代码 babeljs.io/repl
    • 非常感谢,现在它可以工作了。但是,当我使用“派”作为类型时,我只看到严重的不(只有一种带有“切片”标签的颜色)。在我的代码中,实际上“饼图”、“区域”等工作正常。任何提示
    • 要构建一个饼图,您只需要一个系列 - 所以您需要将 4 个系列列映射到一个系列饼图 - 例如像这样jsfiddle.net/pdjqrj5y/1
    • 有一个小错误,当您单击第一个和最后一个之间的任何列时,图表未正确绘制,单击的列消失且其 x 标签保持不变,因此您会看到列之间的空白。
    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    相关资源
    最近更新 更多