设置Matlab中的X轴刻度标签位置

5

我想把这个图中的x轴刻度标签下移:fig

我不确定该怎么做?

这是我使用的脚本:

y=[0.5093 0.8526 0.9171];
x=[0 1600 1100];
hand =plot(y, 'ob-');
set(gca, 'XTick',1:3, 'XTickLabel',{'no interference' '1600' '1100'})
set(hand, 'LineWidth', 4);
set(hand, 'MarkerSize', 30);
set(findobj('type','text'),'FontSize',25);
set(gca,'FontSize',25);
set(findobj('type','axes'),'FontSize',25);
h=get(gca,'Title');
set(h,'FontSize',20);

可能是Matlab图中轴标签和轴之间的距离的重复问题。 - Shai
@Shai 我想把X轴刻度标签向下移动,而不是X轴标签。 - Tak
一个选项:这个MathWorks解决方案展示了如何在自定义位置放置标签,通过将它们定义为文本(还可以旋转它们)。只需在ypos(text()函数调用中的第二个参数)中添加偏移量即可。 - Bonlenfum
@ Bonlenfum 你能否请使用我的脚本来发布一个答案? - Tak
你可能会发现这个链接很有用:http://www.mathworks.com/matlabcentral/fileexchange/3486-xticklabelrotate - Shai
2个回答

4

参考这个MathWorks解决方案的示例,您可以使用text函数在任何位置添加标签。

增加delta的值可以使x轴刻度标签与x轴之间的间隔更大。

编辑:添加了对ytick的自定义控制: stp的值改变了每个刻度之间的步长。显然,更通用的解决方案也会自动识别刻度范围的端点。

figure(1), clf

% set data as your example
y=[0.5093 0.8526 0.9171];
x=[0 1600 1100];
Xt=1:length(x);
hand =plot(y, 'ob-');
set(gca, 'XTick',Xt);

stp=0.05;
Yt=0.5:stp:0.95;
set(gca, 'ytick', Yt)

% Reduce the size of the axis so that all the labels fit in the figure.
pos = get(gca,'Position');
set(gca,'Position',[pos(1), .2, pos(3) .7])

ax = axis; % Current axis limits
axis(axis); % Set the axis limit modes (e.g. XLimMode) to manual
Yl = ax(3:4); % Y-axis limits
Xl = ax(1:2);

% Place the text labels -- the value of delta modifies how far the labels 
% are from the axis.
delta=0.1;
t = text(Xt, Yl(1)*ones(1,length(x))-delta, {'no interference' '1600' '1100'});
%set(t, 'HorizontalAlignment','left','VerticalAlignment','top')
set(t, 'HorizontalAlignment','center','VerticalAlignment','middle')

% Remove the default labels
set(gca,'XTickLabel','')

% and continue with your other settings as required
set(hand, 'LineWidth', 4);
set(hand, 'MarkerSize', 30);
set(findobj('type','text'),'FontSize',25);
set(gca,'FontSize',25);
set(findobj('type','axes'),'FontSize',25);
h=get(gca,'Title');
set(h,'FontSize',20);

text函数有许多选项可以配置。


1
感谢您提供的解决方案。Y轴的刻度已经改变,我希望它能像图中显示的那样。您的解决方案跳过了Y轴的0.005刻度,所以现在显示的是(0.5,0.6,0.7,0.8,0.9),而我想要的是(0.5,0.55,0.6,0.65,...)。 - Tak

2
我认为大多数人希望只需2-3行代码即可实现,不必考虑快速而粗略的方法。
这是未记录的(感谢这里),但它确实有效:
    % adjust ticklabels away from axes
    a=gca;
    a.XRuler.TickLabelGapOffset = 8;
    a.YRuler.TickLabelGapOffset = 8;

已在Matlab 2019a上进行测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接