【问题标题】:Multiple series of data in Highcharts but second line graph is displayed squashed?Highcharts中的多个系列数据但第二​​条线图显示为压扁?
【发布时间】:2025-12-20 03:05:12
【问题描述】:

我对使用 Highcharts API 还是很陌生,并且刚刚开始使用它的酷炫功能。我有一个 ASP.NET MVC Web 应用程序,它从数据源绘制折线图。在我的应用程序中,用户从列表框中选择一个键值,然后从该键中检索一个值数组并将数据用作图形的系列。

[图表 1] 这是绘制的高线图。

[图2]这是预期的输出

从上面的截图中可以看出,CDT158 系列正确显示了图形,更类似于图 2。但是,图 1 中的系列 2 被压扁,应该像图 2 - SINUSOID 中的那样。

这是我准备和显示图表的函数

var myChart;
function prepareChartData(dataChart)
{
    var xAxis = [];
    var dataSeries = [];
    var xTitle;

    for (var i = 0; i < dataChart.length; i++) {
        var items = dataChart[i];
        var XcategoriesItem = moment(items.Time).format("DD-MMM-YYYY HH:mm:ss");
        var seriesData = parseFloat(items.Value);

        xAxis.push(XcategoriesItem);
        dataSeries.push(seriesData);

        xTitle = items.Name;
    }

    if (myChart == undefined)
    {
        plotChartData(xAxis, dataSeries, xTitle);
        return;
    }

    myChart.addSeries({
        title: xTitle,
        data: dataSeries
    });
};

    function plotChartData(Xaxis, dataseries, xtitle)
{
    myChart = new Highcharts.Chart({
        chart: {
            renderTo: 'svgtrendspace',
            type: 'line',
            zoomType: 'xy',
            panning: true,
            panKey: 'shift',
            plotBorderWidth: 1
        },
        title: {
            text: 'Sample Chart'
        },
        legend: {
            layout: 'horizontal',
            align: 'bottom',
            horizontalAlign: 'middle',
            borderWidth: 0
        },
        plotOptions: {
            series: {
                dataLabels: {
                    enabled: false,
                    format: '{y}'
                },
                allowPointSelect: false
            }
        },
        xAxis: {
            type: 'category',
            categories: Xaxis,
            labels: {
                rotation: -65,
                style: {
                    fontSize: '8px',
                    fontFamily: 'Verdana, sans-serif'
                }
            },
            tickInterval: 60
        },
        yAxis: {
            gridLineColor: '#DDDDDD',
            gridLineWidth: 0.5
        },
        series: [{
            name: xtitle,
            data: dataseries,
            //name: '',
            //data: [],
            tooltip: {
                pointFormat: '{series.name}: <b>{point.y}</b><br/>',
                valueDecimals: 2
            }
        }]
    });
};

这是显示图表的 div 元素 &lt;div id="svgtrendspace" style="overflow:auto;display:table-row; height:100%;"&gt;&lt;/div&gt;

从 AE 控制器检索数据的 jquery post 函数。

$.post("/AE/UpdateTrend", { TrendRequestData: jdata },
    function (data) {
        if (data.length > 4) {
            var results = $.parseJSON(data);

            console.log(results);

            prepareChartData(results);
            trendData = results;
        }
        else {
            trendData = "";
            FillNoData("#svgtrendspace");

            $('#MinimumHorizontalLine').val("");
            $('#MaximumHorizontalLine').val("");
        }
    });

我的 highcharts 配置中可能出现什么问题导致第二个系列折线图被压扁?

非常感谢任何帮助。

【问题讨论】:

    标签: javascript jquery asp.net-mvc highcharts


    【解决方案1】:

    我认为这是由使用类别引起的,但实际上您想使用日期时间轴。第一个系列和第二个系列的类别不匹配,这就是结果。换句话说,我会:

    1. 更改点数组的数据格式:

      for (var i = 0; i < dataChart.length; i++) {
        var items = dataChart[i];
        var xDate = +moment(items.Time);
        var seriesData = parseFloat(items.Value);
      
        dataSeries.push([xDate, seriesData]);
      
        xTitle = items.Name;
      }
      
    2. 将类型更改为"datetime" 并删除类别:

      xAxis: {
          type: 'datetime', // type
          // categories: Xaxis, // remove
          labels: {
              rotation: -65,
              style: {
                  fontSize: '8px',
                  fontFamily: 'Verdana, sans-serif'
              }
          },
          // tickInterval: 60 // remove that too - you don't want ticks every 60 milliseconds ;) 
      },
      

    【讨论】:

    • 感谢您的回答。你是对的,我点的数据格式与第二个折线图不匹配。在我将类型更改为datetime 并删除categories 后,第二个折线图现在可以正确显示(未压缩)。剩下的一个问题是,标签 Series 2 没有在应有的位置显示为 SINUSOID。但它正在接xTitle,会出什么问题?
    • 只是猜测,但addSeries() 选项中的title 是什么? ;) 应该有name
    • 我的错误,title 不是addSeries() 选项的正确属性。你又是对的,应该是name。感谢您对此进行调查。 :)
    最近更新 更多