我使用matlab的imagesc
命令创建了一个大热图。它绘制了x和y轴上每个值组合的误差输出。从图中可以看出,轴标签太多了。这可能会变得更加密集,因为我计划增加x和y轴上的点数 - 这意味着我将在更精细的网格上获得更多输出。
我希望对标签保持灵活性,并跳过其中一些标签。我想为X和Y做这个。我也希望灵活运用" ticks"并绘制所有这些或者可能会跳过其中的一些。请记住,X和Y值都没有按顺序增加,首先增量为0.01表示9点,然后是0.1,然后是1或3或其他。我也会改变这些增量。
我试图在第二张图片中显示我想要的图形。我只想要用红色框显示的标签。正如我所说,这些不是设定值,我将使增量更小,这将导致更密集的情节。
感谢您的帮助。
操作系统:Windows 7,8(64位)
Matlab版:Matlab 2014 a
答案 0 :(得分:1)
您可以像这样操作刻度线和标签:
ticksarray=[1 33 41 100 ...] % edit these to whatever you want
tickslabels={'1', '33', '41', '100'; ...} % match the size of both arrays
set(gca,'XTick',ticksarray)
set(gca,'XTickLabel',tickslabels)
同样的事情适用于y轴。
小工作示例:
x=1:100;
y=2*x.^2-3*x+2;
plot(x,y)
ticksarray=[1 33 41 100];
tickslabels={'1', '33', '41', '100'};
set(gca,'XTick',ticksarray)
set(gca,'XTickLabel',tickslabels)
答案 1 :(得分:1)
示例:
figure(1)
load clown
subplot(211)
imagesc(X);
subplot(212)
imagesc(X);
h = gca;
现在,您可以为每个轴设置最大标签数:
%// define maximum number of labels
maxLabel = 3;
h.XTick = linspace(h.xlim(1),h.xlim(2),maxLabel);
h.YTick = linspace(h.ylim(1),h.ylim(2),maxLabel);
或定义应跳过的标签数量:
%// define number of labels to skip
skipLabel = 2;
h.XTick = h.XTick(1:skipLabel:end);
h.YTick = h.YTick(1:skipLabel:end)
您也可以获得不同数量的刻度和标签,但更复杂:
maxLabel = 3;
maxTicks = 6;
h.XTick = linspace(h.xlim(1),h.xlim(2),maxTicks);
h.YTick = linspace(h.ylim(1),h.ylim(2),maxTicks);
h.XTickLabel( setdiff( 1:maxTicks, 1:maxTicks/maxLabel:maxTicks ) ) = repmat({''},1,maxTicks-maxLabel);
h.YTickLabel( setdiff( 1:maxTicks, 1:maxTicks/maxLabel:maxTicks ) ) = repmat({''},1,maxTicks-maxLabel);
如果您使用的是Matlab 2014b的早期版本,则需要set
命令来设置所有属性:
%// define maximum number of labels
maxLabel = 3;
Xlim = get(h,'Xlim');
Ylim = get(h,'Ylim');
set(h,'XTick', linspace(Xlim(1),Xlim(2),maxLabel));
set(h,'YTick', linspace(Ylim(1),Ylim(2),maxLabel));
%// or define number of labels to skip
skipLabel = 2;
XTick = get(h,'XTick');
YTick = get(h,'YTick');
set(h,'XTick', XTick(1:skipLabel:end));
set(h,'YTick', YTick(1:skipLabel:end));
%// or combined
maxLabel = 3;
maxTicks = 6;
Xlim = get(h,'Xlim');
Ylim = get(h,'Ylim');
set(h,'XTick', linspace(Xlim(1),Xlim(2),maxTicks));
set(h,'YTick', linspace(Ylim(1),Ylim(2),maxTicks));
XTickLabel = cellstr(get(h,'XTickLabel'));
YTickLabel = cellstr(get(h,'YTickLabel'));
XTickLabel( setdiff( 1:maxTicks, 1:maxTicks/maxLabel:maxTicks ),: ) = repmat({''},1,maxTicks-maxLabel);
YTickLabel( setdiff( 1:maxTicks, 1:maxTicks/maxLabel:maxTicks ),: ) = repmat({''},1,maxTicks-maxLabel);
set(h,'XTickLabel',XTickLabel);
set(h,'YTickLabel',YTickLabel);
答案 2 :(得分:0)
在应用@thewaywewalk提出的第二种方法后,我得到了下面的第二个数字。显然,标签也需要结构化,因为它们只采用了第一批标签。
然后我尝试操纵如下所示的标签,并得到第三张图片。
skipLabel = 2;
XTick = get(h,'XTick');
YTick = get(h,'YTick');
set(h,'XTick', XTick(1:skipLabel:end));
set(h,'YTick', YTick(1:skipLabel:end));
XTickLabel = get(h,'XTickLabel');
labelsX = cell( length(1: skipLabel:length(XTick)) , 1);
j = 1;
for i = 1: skipLabel:length(XTick)
labelsX{j} = XTickLabel(i, :);
j = j + 1;
end
set(h,'XTickLabel', labelsX);
YTickLabel = get(h,'YTickLabel');
labelsY = cell( length(1: skipLabel:length(YTick)) , 1);
j = 1;
for i = 1: skipLabel:length(YTick)
labelsY{j} = YTickLabel(i, :);
j = j + 1;
end
set(h,'YTickLabel', labelsY);
Y轴标签似乎与之前一样(在刻度线旁边),但X轴标签似乎向左移动了一点。我怎么能纠正这个?
另一个注意事项:如何将科学值更改为正常数字?此外,可能有更好的方法来操纵标签。