设置 xAxis 最小值和最大值时不显示 Highstock 数据

Posted

技术标签:

【中文标题】设置 xAxis 最小值和最大值时不显示 Highstock 数据【英文标题】:Highstock data not showing when setting xAxis min and max 【发布时间】:2019-05-02 06:17:33 【问题描述】:

如果不使用数据,我无法设置 xAxis 最小值和最大值。我尝试使用plotOptions 并设置pointStart: Date.UTC(2016, 3, 1),但是用数据来做这件事。该系列最终出现在最右侧并且无法正确加载。

是否可以设置最小值和最大值并使数据服从设置?当我没有设置minmax 时,它会正确加载。我需要它从 2016 年 4 月开始,到 2018 年 4 月结束,每个月都有一个刻度。

小提琴:https://jsfiddle.net/omaraziz/h5jsk7a3/5/

这是一个几乎可以工作的版本,只需要 xAxis 日期和刻度(数据不完全相同,但 json 的设置完全相同:

数据来自 JSON 文件 (data.json):


   "(1)": [1,2,3,4,5],
   "(2)": [6,7,8,9,0]
   "(3)": [1,4,7,2,0]

设置选项:

var myChart = function() drawChart() 
     $("#container").highcharts("StockChart", 

            rangeSelector: 
                 enabled: false
            ,

            xAxis: 
                 type: 'datetime',
                 tickInterval: (24 * 3600 * 1000) * 30, // every month
                 min: Date.UTC(2016, 3, 1),
                 max: Date.UTC(2018, 3, 4)
            ,

           series: processedData, // from the data loaded below

    );

;

加载 JSON:

processedData = [];

$(function () 
    $getJSON("data.json", function(data) 

        for(let value in data) 

            if(data.hasOwnProperty(value)) 
                processedData.push(
                   name: value,
                   data: data[value],
                )

        
        myChart(); // after the data has loaded
   );
);

【问题讨论】:

您的数据x 值是多少?我的意思是你的每个系列都包含大约 11126 个值。它们是每小时值吗? @pooyan 你的意思是来自 JSON 的那些?它们是我从一个大的 excel 文件中复制的数据。数据的格式与我在此处发布的 json 结构完全相同。数据范围从0到~800 是的,我的意思是来自 json 文件的数据。根据这些数据,您的每个系列将包含大约 11126 个值,您应该确定它们的xaxis。例如,您应该知道这些数据中的每一个都是每小时数据。 【参考方案1】:

如果您每小时都在记录数据,我希望您的问题可以通过使用这两行代码来解决:

pointStart:Date.UTC(2016, 3, 1),
pointInterval: 3600 * 1000

示例如下:

var myChart = function drawChart() 

    $("#container").highcharts("StockChart", 

        rangeSelector: 
            enabled: false,
        ,

        xAxis: 
            type: 'datetime',
            ordinal: false,
            min:   Date.UTC(2016, 3, 1),
            max:  Date.UTC(2018, 3, 4)

        ,
        plotOptions:
            series:
                pointStart:Date.UTC(2016, 3, 1),
                pointInterval: 3600 * 1000
            
        ,

        series: processedData,

    );

;

const processedData = [];

$(function () 
    $.getJSON("https://omaraziz.me/CC-chart/new-activity.json", function (data) 

        for(let value in data) 
            if(data.hasOwnProperty(value)) 
                processedData.push(
                    //pointStart: Date.UTC(2016, 3, 1),
                    name: value,
                    data: data[value],
                )
            
        
        myChart();
    );
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.highcharts.com/stock/highstock.src.js"></script>
<div id="container"></div>

【讨论】:

太棒了,这很有帮助。只有一件事,我如何让它在 2018 年 3 月而不是 17 年 7 月结束? 我希望ordinal: false, 能解决问题。看看我的答案编辑的代码片段。 快速提问,是否可以拉伸数据以适应该范围?如果两年内不可能,那么也许一年?假设范围是一年(2017 年 7 月到 18 年 4 月)。 这取决于你的数据数量和tickInterval设置。

以上是关于设置 xAxis 最小值和最大值时不显示 Highstock 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 X 轴上显示正确的日期

如何使用c#设置日期时间图表的最小值和最大值?

洛谷 1260 工程规划 (差分约束)

如何显示列表中的最小值和最大值?

显示不包括最小值和最大值的列数

如何从列表中显示最小值和最大值?