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刻度标签只会改变一个轴,不会同时改变两个轴。因此,您应该使用 plotyy
的 ax
输出同时修改两个轴。
注意: 从 R2016a 开始,不再推荐 plotyy
,您应该改用 yyaxis
.
我正在使用以下代码。
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刻度标签只会改变一个轴,不会同时改变两个轴。因此,您应该使用 plotyy
的 ax
输出同时修改两个轴。
注意: 从 R2016a 开始,不再推荐 plotyy
,您应该改用 yyaxis
.