Matlab:条形图中缺少标签

4

使用Matlab 2012和2013,我发现在 bar 图表上设置 XTickLabel 只适用于多达15个条形图。如果有更多的条形图,则标签将缺失,如下所示。

绘制15个条形图:

N = 15;
x = 1:N;
labels = num2str(x', '%d');
bar(x);
set(gca, 'XTickLabel', labels);

N = 15

绘制16个条形图:

N = 16;
x = 1:N;
labels = num2str(x', '%d');
bar(x);
set(gca, 'XTickLabel', labels);

N = 16

N > 15时,它总是只显示10个标签。

还有其他人遇到过这种情况吗?有什么解决方法吗?因为我正在绘制离散类别而不是连续函数,所以需要所有的标签。

1个回答

6

这种情况发生是因为刻度标签必须与刻度本身匹配。以你提供的例子N = 16;x = 1:N;为例,MATLAB会自动在你的机器和我的机器上生成以下XTick

>> xticks = get(gca,'xtick')
xticks =
     0     2     4     6     8    10    12    14    16    18
>> numel(xticks)
ans =
    10

只需10个刻度标记,对应16个不同的条形图。因此,当你运行set(gca, 'XTickLabel', labels); 时,使用labels = num2str(x', '%d'); (16个标签)会生成第二张图片,但标签和条形之前/之后的刻度位置(在0和18处)是错误的。
为了为每个条形图设置刻度标签,还需要设置刻度与之匹配。
set(gca,'XTick',x) % this alone should be enough
set(gca,'XTickLabel',labels);

然后你将会得到期望的结果:

这里输入图片描述

不知为何,16似乎是MathWorks决定XTick不应为每个条形图绘制的“魔法数字”,如果需要,则由用户设置。


1
谢谢!可惜这个不一致性在 bar 文档页面中没有解释。 - Domi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接