使用 tickInterval 时在 Highcharts 中的次要刻度上显示标签

Posted

技术标签:

【中文标题】使用 tickInterval 时在 Highcharts 中的次要刻度上显示标签【英文标题】:Display labels on minor tick in Highcharts when using tickInterval 【发布时间】:2016-06-20 14:34:51 【问题描述】:

在带有 datetime 轴的 Highcharts 图表上,我试图突出显示周数。首先,我想到了使用网格并将 tickInterval 设置为 7*24*60*60*1000 并将 minorTickInterval 设置为 24*60*60*1000。将选项 gridLineWidth 设置为 2,结果几乎是完美的。

问题是缩放时:出现小刻度但没有标签。我找不到如何添加它。而且标签不是动态的。

你可以试试这个演示:https://jsfiddle.net/gdebrion/19x4nmp5/19/ 第一张图表是基本图表。缩放时,您可以看到 x 轴的变化。 第二张图是我的。星期是可见的,但是当放大直到全宽显示一天时,唯一可见的刻度是次要刻度,没有标签……

如果您有任何想法,请告诉我。谢谢!

【问题讨论】:

【参考方案1】:

API 不提供在次要刻度上显示标签的方法。 http://www.highcharts.com/docs/chart-concepts/axes

小蜱

如果设置了 minorTickInterval 选项,则在主要刻度之间布置次要刻度。这包括次要刻度线和次要网格线,它们有自己的外观选项,但不包括标签

查看 Highcharts 的源代码后,我也没有看到任何用于次要刻度的标签表示,就像主要刻度 (axis.labelEdge = [];) 一样。 https://github.com/highcharts/highcharts/blob/b6bc666da00d37c5c4e3c0d7fe238b8526e583ea/js/parts/Axis.js

    ...
    // Major ticks
    axis.ticks = ;
    axis.labelEdge = [];
    // Minor ticks
    axis.minorTicks = ;

    // List of plotLines/Bands
    ...

更新: 这是为 highcharts 启用次要刻度标签的稍微粗略的解决方案: http://jsfiddle.net/strince/deuez7gk/

当缩放太远时,代码不会处理重叠标签,因此您需要放大一点才能看到它的工作。

图表代码更新为:

  // Keep track of elements created. 
  var minorTickLabels = new Array();

  ...

  events: 
    load: function()  addMinorTickLabels(this); ,
    redraw: function()  addMinorTickLabels(this); 
  

  ...

function addMinorTickLabels(chart) 
// The elements need to be destroyed, otherwise a dictionary
// internal to highcharts will accumulate and pollute the chart.
for (var i = 0; i < minorTickLabels.length; i++) 
    var textItem = minorTickLabels[i];
  textItem.destroy();

minorTickLabels = new Array();

var axis0 = chart.xAxis[0];
var lastIndexFound = 0;

for (var tick in axis0.minorTicks) 
  var el = axis0.minorTicks[tick];

  // Skip double labels on major ticks.
    var index = axis0.tickPositions.indexOf(el.pos, lastIndexFound);
    if (index >= 0) 
    listIndexFound = index;
    continue;
  

        var xPos = el.mark.getBBox().x;
  var yPos = el.mark.getBBox().y;
  var labelText = 0;

        // The formatting parameters below should be passed in.
        var textItem = chart.renderer.text(Highcharts.dateFormat("%d. %b", el.pos), xPos, yPos)   
  .css(
    color: '#101010',
    fontSize: '8px'
  )
  .attr(
    rotation: -25,
    zIndex: 6
  );

  // Add the tick label to the chart.
  textItem.add();

  minorTickLabels.push(textItem);

;

【讨论】:

以上是关于使用 tickInterval 时在 Highcharts 中的次要刻度上显示标签的主要内容,如果未能解决你的问题,请参考以下文章

Python3 tkinter基础 Scale orient 横竖 resolution单步步长 length 长度 tickinterval 指示刻度

Python3 tkinter基础 Scale orient 横竖 resolution单步步长 length 长度 tickinterval 指示刻度

Python3 Tkinter基础 Scale orient 横竖 resolution单步步长 length 长度 tickinterval 指示刻度

HIGHCHARTS:drilldown.js更改饼图标签颜色

Highcharts - 日期时间轴标签重叠

Highcharts 日期刻度位置隐藏删除