x刻度标签未完全关闭

时间:2017-06-12 14:57:38

标签: matlab plot labels

我正在使用以下代码。

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);

chart

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

我正在使用Matlab R2014a。

2 个答案:

答案 0 :(得分:1)

我能够在R2013a中重现您的错误。事实证明你的行:

set(gca,'XTickLabel','')

仅删除x轴标签的部分。如果您将其更改为:

set(ax,'XTickLabel','')

并在重新定义ax之前将其向上移动,以便它引用的axplotyy返回的那个,它将为您删除所有x轴标签

这是因为plotyy创建了两个轴,但gca只会引用一个。通过在致电plotyy后执行以下操作,您可以看到两个轴都为其'XTickLabel'属性设置了值:

>> 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刻度标签只会更改一个轴,而不是两个轴。因此,您应该使用ax的{​​{1}}输出同时修改两个轴。

注意:自R2016a起不再推荐plotyy,您应该使用yyaxis

答案 1 :(得分:0)

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

使用

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

输出:

output

但是,您似乎正在尝试用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

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

output 2