如何在MATLAB绘图中为刻度标签分配多个颜色?

5

有没有可能在MATLAB中为一个坐标轴上的单个数字(或一组数字)着色?

假设我有一个绘图:

plot(1:10, rand(1,10))

现在,我能否让x轴上的数字3变成红色?

你想修改的是x轴刻度标签吗? - Schorsch
是的,这是x轴刻度标签。 - Stewie Griffin
2
请查看此问题的答案的第二部分 - 您应该能够修改它以更改单个刻度的颜色而不是使其加粗(并在普通轴上使用它而不是在彩条上)。 - wakjah
在wakja的链接问题中,要设置的颜色属性将是XColor。然而这并不是最好的解决方案,因为你只是在原始图表上叠加了另一组坐标轴,而没有编辑坐标轴标签。 - Doresoom
也许这有些作弊,但最简单的方法是制作一个pdf文件,然后在Adobe Illustrator中进行编辑。Matlab绘图通常需要修整才能达到出版质量。 - Joshua Barr
3个回答

9
单个刻度标签可以使用tex标记进行着色,其默认情况下启用用于刻度标签。它在轴的TickLabelInterpreter属性中定义。
它提供了两个命令来为文本着色:
\color{},其中是诸如“red”或“green”之类的颜色名称,以及
\color[rgb]{,

这看起来很棒!但是我无法测试它,因为我不再拥有MATLAB了。 :( - Stewie Griffin
确实非常不错。与许多新的便捷图形功能一样,这仅适用于HG2,因此适用于MATLAB版本> = R2014b。 - Hoki

8

不幸的是,在一个坐标轴对象中不能有多种颜色的刻度标签。但是,有一个方法(受 MathWorks 支持站点上 这个页面 的启发)可以实现相同的效果,即在现有的坐标轴上覆盖另一个只有一个红色刻度的坐标轴。

以下是一个例子:

figure
plot(1:10, rand(1,10))
ax2 = copyobj(gca, gcf);                             %// Create a copy the axes
set(ax2, 'XTick', 3, 'XColor', 'r', 'Color', 'none') %// Keep only one red tick
ax3 = copyobj(gca, gcf);                             %// Create another copy
set(ax3, 'XTick', [], 'Color', 'none')               %// Keep only the gridline

结果是:

result


2
+1 超越我了 :P 顺便说一句,你可以不复制轴的内容也实现这个效果,只需将“'Color'”设置为“none”,然后让重叠的轴拥有空的“'YLim'”和相同的“'XLim'”。 - wakjah
与其使用 copyobj,你可以创建第二个 axes,并在其上设置 Color;将其设置为 'none' 将使背景透明。 - wakjah
2
@wakjah 我更喜欢复制,否则你需要同步轴(例如使用 linkaxes)以便它们正确重叠。谢谢你提醒我关于 'Color' 的问题,我注意到我的刻度线消失了,将其设置为 'none' 可以解决这个问题 :) - Eitan T
1
非常感谢!您知道我如何获得黑色垂直网格线吗?我无法将它们变为黑色而不破坏刻度标签。(以防有任何疑问:垂直网格是红色的,水平网格是黑色的)。 - Stewie Griffin
1
@EitanT。我正在寻找set(gca,'XGrid','on')通常出现的内容。我刚刚发现它实际上可以在您上面的代码中工作,但是我无法使其在我的(稍微复杂一些的)代码中起作用。我已经下班了,所以明天之前我无法检查它,但我想我会搞清楚的=)再次感谢! - Stewie Griffin
显示剩余4条评论

3
作为将整个轴内容复制的替代方案,还可以通过创建额外的axes对象来实现:
ax = axes();
p = plot(1:10, rand(1,10));
myTick = 3;

% Create new axes with transparent backgrounds
ax2 = axes();
ax3 = axes();
set([ax2 ax3], 'XLim', xlim(ax));
set([ax2 ax3], 'Color', 'none');

set(ax3, 'XTick', [], 'YTick', []);

% Give one new axes a single tick mark
set(ax2, 'YTick', []);
set(ax2, 'XTick', myTick);
set(ax2, 'XColor', 'r');

 % This line is necessary to use the plot toolbar functions like zoom / pan
linkaxes([ax ax2 ax3]);

+1:如果您手动设置XLim,则不需要使用linkaxes ;) - Eitan T
如果你想使用工具栏的缩放功能,就需要这么做 :) - wakjah
没错 :) 另外,你可以使用 xlim(ax) 代替 get(ax, 'XLim'),这样更短。 - Eitan T

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