我正在使用以下代码。
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。
答案 0 :(得分:1)
我能够在R2013a中重现您的错误。事实证明你的行:
set(gca,'XTickLabel','')
仅删除x轴标签的部分。如果您将其更改为:
set(ax,'XTickLabel','')
并在重新定义ax
之前将其向上移动,以便它引用的ax
是plotyy
返回的那个,它将为您删除所有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!
输出:
但是,您似乎正在尝试用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
使用文本作为标签输出,如我的代码所示: