x 刻度标签没有完全关闭

x tick labels are not completely turning off

我正在使用以下代码。

days = 1:1:15;
nash=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15];
rew = ones(1,15);
rate  = rew/max(rew);
[ax, h1, h2] = plotyy(days, nash, days, rate, 'bar', 'plot');
set(get(ax(2), 'Ylabel'), 'String', 'Average Throughput');
set(get(ax(1), 'Ylabel'), 'String', 'Probability of Convergence');

pos = get(gca,'Position');
set(gca,'Position',[pos(1), .2, pos(3) .65])
Xt = days;
set(gca,'XTick',Xt);
algos = ['[3  36 24]';'[18 36  9]';'[33 24  6]';'[33 12 18]';'[36 17 10]';
         '[33 20 10]';'[34 24  5]';'[34 12 17]';'[34 20  9]';'[48 12  3]';
         '[48 10  5]';'[48  6  9]';'[40 20  3]';'[40 17  6]';'[40 18  5]'];
ax = axis; 
axis(axis);
Yl = ax(3:4); 
set(gca,'XTickLabel','')

t = text(Xt,Yl(1)*ones(1,length(Xt)),algos(1:length(days),:));

set(t,'HorizontalAlignment','right','VerticalAlignment','top','Rotation',90,'Fontsize',10);

我想完全删除 x 轴上的原始标签,但是我的 x 刻度标签并没有完全关闭。

我正在使用 Matlab R2014a。

正如新手指出的那样,您的问题是 gca 轴对象不是具有所有标签的对象!我在这里留下我的答案,因为它建立在该解决方案的基础上,使用更简洁的方法将标签与您的绘图项目对齐。

使用

解决原始问题(如 gnovice 所说)
 [ax, h1, h2] = plotyy(days, nash, days, rate, 'bar', 'plot');
 set(ax,'XTickLabel','') % should work!

输出:


但是,您似乎正试图用 text 对象替换 x 刻度标签,我不确定为什么。 只需将标签更改为文本标签即可!

[ax, h1, h2] = plotyy(days, nash, days, rate, 'bar', 'plot');
% NOTE: I've made this a cell array by using curly braces { }
algos = {'[3  36 24]';'[18 36  9]';'[33 24  6]';'[33 12 18]';'[36 17 10]';'[33 20 10]';'[34 24  5]';'[34 12 17]';'[34 20  9]';'[48 12  3]';'[48 10  5]'; '[48  6  9]';'[40 20  3]';'[40 17  6]';'[40 18  5]'};
% Set the text labels as axis labels
set(ax, 'xticklabel', algos);
% Rotate (as of Matlab 2014b)
set(ax, 'xticklabelrotation', 90);

使用2014a,将无法使用xticklabelrotation。相反,您可能会发现文件交换中的 Rotate Tick Label 功能很有用。此功能本质上与您正在尝试做的事情相同,但包装整齐且审查良好。

下载后,

将简单地调用而不是上面的最后一行
rotateticklabel(ax, 90); % Could even just do rotateticklabel(gca) as 90 is default

使用文本作为标签的输出,如我的代码所示:

我能够在 R2013a 中重现您的错误。原来你的行:

set(gca,'XTickLabel','')

仅删除 一些 的 x 轴标签。如果将其更改为:

set(ax,'XTickLabel','')

并在重新定义 ax 之前将其向上移动,这样它所指的 ax 就是 plotyy 返回的那个,它将删除所有 x 轴标签给你。

这是因为 plotyy 创建了两个轴,但是 gca will only ever refer to one. You can see that both axes have values set for their 'XTickLabel' 属性 在调用 plotyy 之后执行以下操作:

>> get(ax(1),'XTickLabel')  % Get x tick labels for the first axes

ans =

1 
2
3 
4 
5 
6 
7 
8 
9 
10
11
12
13
14
15

>> get(ax(2),'XTickLabel')  % Get x tick labels for the second axes

ans =

0 
2 
4 
6 
8 
10
12
14
16

使用gca改变x刻度标签只会改变一个轴,不会同时改变两个轴。因此,您应该使用 plotyyax 输出同时修改两个轴。

注意: 从 R2016a 开始,不再推荐 plotyy,您应该改用 yyaxis.