datetime Highchart图表的最小勾选间隔(每月)不起作用

datetime Highchart图表的最小勾选间隔(每月)不起作用,datetime,highcharts,Datetime,Highcharts,我正在使用日期时间高点图表,我希望x轴刻度间隔每个月都显示(1月12日、2月12日、3月12日)。但如果数据点小于4,则x轴标签也开始显示月份的天数(12月10日、12月24日、1月7日)。如何确保即使数据点较少或图形被缩放,勾号间隔也是每月一次。以下是x轴的代码: xAxis : { type: 'datetime', tickmarkPlacement:'on',

我正在使用日期时间高点图表,我希望x轴刻度间隔每个月都显示
(1月12日、2月12日、3月12日)
。但如果数据点小于4,则x轴标签也开始显示月份的天数
(12月10日、12月24日、1月7日)
。如何确保即使数据点较少或图形被缩放,勾号间隔也是每月一次。以下是x轴的代码:

xAxis : {
                        type: 'datetime',
                        tickmarkPlacement:'on',
                        dateTimeLabelFormats: {
                            month: '%b-%y',
                            },
                        minRange:1*30*24*60*60*1000,
                        labels : {
                            rotation :'280',
                            align:'right',
                            style: {
                                fontFamily : 'Helvetica',
                                fontSize: '10px'
                            }
                        }
                    }

提前感谢

这里的问题是并非所有月份都有30天,最好不要设置滴答声间隔或最小范围。您可以尝试自己生成月份,如:

startDate = Date.UTC(2012, 1, 1); //your starting date
// Set the xaxis value as first day of month
for (var i = 0; i < yourData.length; i++) {
    var d = new Date();
    d.setTime(startDate);
    d.setMonth(d.getMonth() + i);
    categories.push(d.getTime());
}
请参阅第一个选项的工作演示,网址为:

摘自:


您还可以检查highcharts“不规则间隔时间序列”中的代码。这里他们使用的是
[Date.UTC(1970,9,21),0],[Date.UTC(1970,10,4),0.28]
这里的问题是不是所有月份都有30天,最好不要设置滴答声间隔或最小范围。您可以尝试自己生成月份,如:

startDate = Date.UTC(2012, 1, 1); //your starting date
// Set the xaxis value as first day of month
for (var i = 0; i < yourData.length; i++) {
    var d = new Date();
    d.setTime(startDate);
    d.setMonth(d.getMonth() + i);
    categories.push(d.getTime());
}
请参阅第一个选项的工作演示,网址为:

摘自:


您还可以检查highcharts“不规则间隔时间序列”中的代码。在这里,他们使用
[Date.UTC(1970,9,21),0],[Date.UTC(1970,10,4),0.28]

正如我在前面的评论中所提到的,获得您要求的最简单的方法是设置滴答声间隔:

xAxis: { 
  type: 'datetime',
  tickInterval:86400000 * 30
}
例如:

通过这种设置,数据的间隔是多少并不重要——在本例中,数据是每天的——或者数据的间隔是否不规则也不重要


无论缩放的级别或数据点的数量如何,在数据范围内,每个月都会有一个勾号和标签。

如我在前面的评论中所述,获取所需内容的最简单方法是设置勾号间隔:

xAxis: { 
  type: 'datetime',
  tickInterval:86400000 * 30
}
例如:

通过这种设置,数据的间隔是多少并不重要——在本例中,数据是每天的——或者数据的间隔是否不规则也不重要


无论缩放级别或数据点数量如何,在数据范围内每个月都会有一个刻度和标签。

尝试放置精确间隔刻度,系统将自动显示日期或月份

您只需要在放置记号后格式化标签

      Options.xAxis.tickPositioner = function () {
        const ticks = this.series[0].xData;
        let result = [];

        for (let index = 0; index < ticks.length; index++) {
          result.push(ticks[index]);
        }
        return result;
      };
Options.xAxis.tickPositioner=函数(){
常量ticks=this.series[0]。扩展数据;
让结果=[];
for(让index=0;index
和格式xAxis 标签:{ 格式:“{值:%b-%Y}”, 对齐:“居中” }

查看工具提示 工具提示:{ 值后缀:“”, 值前缀:“”, xDateFormat:“%B-%Y”, 数值小数:0
},

尝试输入精确间隔勾号,系统将自动显示日期或月份

您只需要在放置记号后格式化标签

      Options.xAxis.tickPositioner = function () {
        const ticks = this.series[0].xData;
        let result = [];

        for (let index = 0; index < ticks.length; index++) {
          result.push(ticks[index]);
        }
        return result;
      };
Options.xAxis.tickPositioner=函数(){
常量ticks=this.series[0]。扩展数据;
让结果=[];
for(让index=0;index
和格式xAxis 标签:{ 格式:“{值:%b-%Y}”, 对齐:“居中” }

查看工具提示 工具提示:{ 值后缀:“”, 值前缀:“”, xDateFormat:“%B-%Y”, 数值小数:0
},

您可以使用。如果您在实现方面遇到问题或希望找到另一个解决方案,请发布您的问题的实例,例如在JSFIDLE中。我不想自己定义勾号位置。我要高图表来决定。但是,我不希望每个月都有滴答声。如果你想让Highcharts做出与现在不同的决定,那么你可以扩展HC-如果你认为这是一个bug,应该修复,那么请发布一个实时演示。你的标题说滴答声间隔不起作用,但你在发布的代码中没有指定滴答声间隔。将滴答声间隔设置为30天,它应该按照您所描述的那样工作。您可以使用可能的重复。如果您在实现方面遇到问题或希望找到另一个解决方案,请发布您的问题的实例,例如在JSFIDLE中。我不想自己定义勾号位置。我要高图表来决定。但是,我不希望每个月都有滴答声。如果你想让Highcharts做出与现在不同的决定,那么你可以扩展HC-如果你认为这是一个bug,应该修复,那么请发布一个实时演示。你的标题说滴答声间隔不起作用,但你在发布的代码中没有指定滴答声间隔。将您的tickInterval设置为30天,它应该按照您所描述的那样工作。虽然并非所有月份都有30天这一点显然是正确的,但如果将tickInterval设置为30天,则结果将是每个月的轴标签。如果需要绝对精度,你可以每月计算并使用tickPositions或tickPositioner,但海报上已经说他们不想这样做。此外,如果你在张贴的小提琴中查看结果,它无法达到原始帖子的要求-没有每个月的标签;相反,你为数据本身操纵了x值,如果你看实际值,它们不是每个月的第一个值,它们相隔30天:)你绝对准确地说是对的,但在问题中,如果你将数据更改为4个值,他们会要求每个值1个月,每个点之间相隔1个月(正如他们所问的那样)。虽然并非所有月份都有30天,但如果将tickInterval设置为30天,结果将是每个月都有一个轴标签。如果需要绝对精度,你可以每月计算并使用tickPositions或tickPositioner,但海报上已经说他们不想这样做