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它帮助了很多,谢谢