Matlab x记号标签未完全关闭
我正在使用以下代码Matlab x记号标签未完全关闭,matlab,plot,labels,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), 'Ylab
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。正如gnovice所指出的,您的问题在于
gca
轴对象不是具有所有标签的对象!我将我的答案留在这里,因为它建立在这个解决方案的基础上,使用一种更简洁的方法将标签与绘图项目对齐
使用
[ax, h1, h2] = plotyy(days, nash, days, rate, 'bar', 'plot');
set(ax,'XTickLabel','') % should work!
输出:
但是,似乎您正试图用
文本
对象替换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
。相反,您可能会发现文件交换中的函数很有用。这个函数基本上做的事情与您正在尝试的相同,但是它被整齐地打包并经过良好的审查
一旦下载,它将被调用,而不是上面的最后一行
rotateticklabel(ax, 90); % Could even just do rotateticklabel(gca) as 90 is default
使用文本作为标签输出,如“我的代码”中所示:
我能够在R2013a中重现您的错误。事实证明,您的产品线:
set(gca,'XTickLabel','')
仅删除部分x轴标签。如果将此更改为:
set(ax,'XTickLabel','')
并在重新定义ax
之前将其上移到,以便它引用的ax
是返回的,它将为您删除所有x轴标签
这是因为有两个轴是由plotyy
创建的,但只会引用一个轴。调用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记号标签只会更改一个轴,而不会同时更改两个轴。因此,应使用plotyy
的ax
输出同时修改两个轴
注意:从R2016a开始,不再推荐使用
plotyy
,您应该改为使用。我无法重现此错误(MATLAB 2017a)。XLabel对我来说正确地消失了,并被你的文本所取代。在R2016b中它对我也很好。你可以使用rate=[1 2 3 4 5 6 7 9 10 11 13 14 15];[18 36 9]下面的xlabel是2,而不是desired@user7341333:用set(ax,'XTickLabel','')替换set(gca,'XTickLabel','')是否有帮助?(在本例中,ax
是由plotyy
返回的第一个,而不是通过执行ax=axis;
重写的)但是我使用的是Matlab2014a,因此我使用的是文本方法……。因为XTickLabel旋转在Matlab2014b中工作,我无法使用它。我已经做了进一步的编辑,因为我看到了您正在使用的版本。我尝试使用以下代码,但给了我相同的错误集(gca,'XTick',1:15)集(gca,'XTickLabel',{'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])th=rotateticklabel(gca,90);@gnvoice它帮助了很多,谢谢