【问题标题】:Highcharts/Highstocks: How to manually set the X-axis rangeHighcharts/Highstocks:如何手动设置 X 轴范围
【发布时间】:2015-12-02 23:00:34
【问题描述】:

我正在尝试手动设置 x 轴范围。所以,我的 x 轴需要采用小时/分钟的格式,并且应该从 0 小时到 48 小时,每个刻度增加 15 分钟,这样它就是 0, 15 , 30, 45, 1:00, 1 :15, 1:30, 1:45, 2:00..... 到 48:00

我不确定如何执行此操作,我正在从外部 Json 文件中提取数据。

在我的 JavaScript 中,这就是我所拥有的

$(function () {

            $.getJSON('JsonFile.json', function (data) {

                var processedData = [];
                Highcharts.each(data, function (d) {
                    processedData.push(d.X);
                });

                // Create the chart
                $('#container').highcharts('StockChart', {
                    rangeSelector: {
                        selected: 1
                    },

                    title: {
                        text: 'X'
                    },

                    series: [{
                        data: processedData,
                        pointStart: Date.UTC(2010, 1, 1),
                        pointInterval: 1000 * 60 * 15 // Every 15 minute. 1000 miliseconds in 1 second, 60 seconds for 1 minute.
                    }],

                    xAxis: {
                         floor: 0,
                         ceiling: 1000 * 60 * 60 * 48,
                         type: 'datetime',
                         dateTimeLabelFormats: {
                         hour: '%H:%M'
                        }
                    }

                });
            });

        });

现在的方式,它不绘制图表,给我一个空图表,如图所示 enter image description here

【问题讨论】:

  • 创建图表后是否要更新坐标轴?你需要什么值类型?
  • 我希望它在页面加载时有一个固定的初始轴。 X 轴应从 0 开始,以 15 分钟递增,一直到 48 小时,例如,0、00:15、00:30、00:45、01:00、01:15..... 48 :00。它们应该以小时和分钟为单位@AdiDarachi

标签: javascript html css highcharts highstock


【解决方案1】:

更新 2

我更新了小提琴以在 48 小时的时间跨度内分布任意数量的数据点。要每 15 分钟放置一个刻度标签,您可以将 tickInterval: 1000*60*15 添加到您的 xAxis 选项中。但是,如果没有足够的可用空间,Highcharts 将不会呈现所有标签(即使指定此设置,它也会变得非常混乱,请自行查看。)

详情请参阅updated fiddle


别忘了查看HighCharts DocumentationAPI Reference,它们会很有帮助:-)

【讨论】:

  • 嗨,我已将图像附加到我的问题中,现在的方式 - 它不绘制图表
  • @axchink 你能提供你的 JsonFile.json 的结构吗?
  • '{ "Measure": ##, "Measure2":##, }, { "Measure": ##, "Measure2":##, }, { "Measure": ## , "Measure2":##, }, { "Measure": ##, "Measure2":##, }, { "Measure": ##, "Measure2":##, }, { "Measure": # #, "Measure2":##, }'
  • @axchink 这并没有真正的帮助,对不起。如果您的数据对象的属性实际上被称为“measure1/2”,那么将 d.X 推送到处理数据应该不起作用。 console.log() 是你的朋友。另外,你看过我更新的答案了吗?
  • 它不会加载,因为pointStartDate.UTC(2010, 1, 1) -> 1264982400000,而ceiling 设置为1000 * 60 * 60 * 48 -> 172800000。这意味着您在 xAxis 上的最大值低于您系列中的第一个点:)
【解决方案2】:

您可以使用xAxis.labels.formatter,例如:http://jsfiddle.net/cgoz4shr/1/

xAxis: {
  type: 'datetime',
  labels: {
    formatter: function(){
      var minutes = Highcharts.dateFormat('%M', this.value),
          days = parseInt(Highcharts.dateFormat('%d', this.value)) - 1,
          hours = days * 24 + parseInt(Highcharts.dateFormat('%H', this.value));

      return hours + ':' + minutes;
    }
  }
}

参考Highcharts.dateFormat

当然,你可以修改返回的内容,比如hours如果hours == 0等可以去掉。

【讨论】:

  • Fus,谢谢,您的代码有效,但在 x 轴上,我得到的值范围是 24:00 到 216:00。有没有办法让我从 0:00 到 48:00?另外,您能否解释一下 var minutes 和 days 代码行在做什么?我没有关注它,尤其是 var days 行。
  • 尝试放入 'floor: 0,' 'ceiling: 1000 * 60 * 60 * 48,'
  • 也许你有很多点?没有现场演示很难说。创建 jsFiddle(例如更新我的),我们会考虑这个。该行从时间戳中检索分钟数和天数。我强烈建议阅读我发布的参考资料。
  • 我已经更新了你的 jsfiddle。确实有太多的数据值(899 点)无法适应 48 小时/15 小时,与 899 条数据相比大约是 192 点。每个点不必每 15 分钟点循环运行一次,这样 899 个数据必须适合 48 小时。这导致每个数据点必须每 3.2 分钟运行一次。但最好每 15 分钟标记一次 x 轴刻度。
  • 那我觉得你应该根据两点之间的范围改变pointInterval。现在你设置了 15 分钟,如果你有更多的点,计算那个距离然后设置。
猜你喜欢
  • 2012-09-06
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
相关资源
最近更新 更多