限制 Chart.js 折线图上的标签数量

IT技术 javascript css canvas charts chart.js
2021-03-15 18:52:42

我想从我得到的数据中显示图表上的所有点,但我不想显示它们的所有标签,因为这样图表的可读性不是很好。我在文档中寻找它,但找不到任何限制它的参数。

我不想只拿三个标签为例,因为那样图表也仅限于三个点。是否可以?

我现在有这样的事情:

在此处输入图片说明

如果我能留下每四分之三的标签,那就太好了。但我完全没有发现标签选项。

6个回答

尝试添加options.scales.xAxes.ticks.maxTicksLimit选项:

xAxes: [{
    type: 'time',
    ticks: {
        autoSkip: true,
        maxTicksLimit: 20
    }
}]
maxRotation: 0如果您希望它在开始放置标签之前不旋转,您也可以添加
2021-04-22 18:52:42
上面的答案加上这里的答案stackoverflow.com/a/372​​57056/558094,就是炸弹。
2021-04-24 18:52:42
这里不对劲。我在最后两个滴答之间有一个巨大的差距:jsfiddle.net/askhflajsf/xzk6sh1q
2021-04-26 18:52:42
你从哪里得到这些信息?我正在为 Chart.js 阅读很多问题 - 我无法在他们的文档chartjs.org/docs/latest 中找到,我是否错过了一些我实际上可以找到所有这些小属性和可覆盖回调记录的地方?
2021-05-03 18:52:42
指向文档的链接不再有效。在文档中根本找不到此信息,但它有效:)
2021-05-14 18:52:42

为了具体起见,假设您的原始标签列表如下所示:

["0", "1", "2", "3", "4", "5", "6", "7", "8"]

如果您只想显示每 4 个标签,请过滤您的标签列表,以便填充每 4 个标签,而所有其他标签都是空字符串(例如["0", "", "", "", "4", "", "", "", "8"])。

请注意,传递""也会删除图表上的相应工具提示!
2021-04-21 18:52:42
除非我错了,这可以用一个列表理解很容易做到,如果你想如显示每10个标签: my_labels = [my_labels[i] if i % 10 == 0 else "" for i in range(len(my_list))]数字 10 当然可以在文件的开头声明为常量,以便更容易地参数化过程。
2021-04-27 18:52:42
这是一个伟大的黑客,谢谢!在这里添加了它
2021-05-02 18:52:42
它也可以没有"",就像在chart.js的这个问题垂直网格线问题的答案中一样,其中OP在第一次出现这个双引号时出现黑线问题,在这种情况下它有帮助,再次作为@ haywire 提到它从工具提示中删除了标签
2021-05-19 18:52:42

对于希望在 Chart JS V2 上实现此目标的任何人,以下内容都将起作用:

 var options =  {  
         scales: {
            xAxes: [{
                afterTickToLabelConversion: function(data){


                    var xLabels = data.ticks;

                    xLabels.forEach(function (labels, i) {
                        if (i % 2 == 1){
                            xLabels[i] = '';
                        }
                    });
                } 
            }]   
        }
}

然后像往常一样将 options 变量传递给一个:

myLineChart = new Chart(ctx, {
    type: 'line',
    data: data,
    options: options
});`

更新:

我已经使用来自 Nnick 的 Chart.js 主分支的最新拉取(截至 2014 年 1 月 27 日)更新了我的分支。 https://github.com/hay-wire/Chart.js/tree/showXLabels

原始答案:

对于那些仍然面临这个问题的人,我不久前 fork Chart.js 来解决同样的问题。您可以查看:https : //github.com/hay-wire/Chart.js/tree/skip-xlabels => 旧分支!检查 showXLabels 分支以获取最新拉取。

如何使用:

适用于条形图和折线图。

用户现在可以传递 a{ showXLabels: 10 }以仅显示 10 个标签(实际显示的标签数量可能会有所不同,具体取决于 x 轴上存在的总标签数量,但它仍将保持接近 10 个)

当数据量非常大时很有帮助。早些时候,由于 x 轴标签在狭窄的空间中相互重叠,因此该图过去看起来很糟糕。使用showXLabels,用户现在可以控制将标签数量减少到适合他可用空间的任何标签数量。

请参阅所附图像进行比较。

没有showXLabels选项: 在此处输入图片说明

随着{ showXLabels: 10 }传入选项: 在此处输入图片说明

这是关于它的一些讨论:https : //github.com/nnnick/Chart.js/pull/521#issuecomment-60469304

使用 Chart JS 2.6.0 并且该选项不起作用。最终我不得不使用@ben 的回答stackoverflow.com/a/26183983/3319454
2021-04-22 18:52:42
尝试使用它,但看起来“Chart.Line.js”没有被使用,因此没有任何变化。我使用了“新图表(ctx)。线(数据,选项);” 创建图表。
2021-05-11 18:52:42
很想使用它,但我一定是做错了什么。我引用了github.com/hay-wire/Chart.js/blob/showXLabels/Chart.js但(截至 2015 年 10 月 30 日)它不起作用,甚至不包含短语“showXLabels”。较旧的,在github.com/hay-wire/Chart.js/blob/skip-xlabels/Chart.js,工作得很好。很想获得最新的可用的标记版本,这样我就可以安全地从 RawGit 将其 CDN 链接。这个小提琴(虽然没有提炼到只是问题)显示了我的意思:jsfiddle.net/45cLcxdh/14
2021-05-12 18:52:42
@alexalejandroem 是的,2014 年就有人回答了!;-)
2021-05-14 18:52:42
我认为这是以前版本的一部分
2021-05-20 18:52:42

用于轴旋转

用这个:

          scales: {
        xAxes: [
          {
            // aqui controlas la cantidad de elementos en el eje horizontal con autoSkip
            ticks: {
              autoSkip: true,
              maxRotation: 0,
              minRotation: 0
            }
          }
        ]
      }