是否可以在 MATLAB 中的一个轴上为单个数字(或一组数字)着色?
假设我有一个情节:
plot(1:10, rand(1,10))
现在,我可以将 x 轴上的数字 3 设为红色吗?
不幸的是,一个轴对象中的刻度标签不能有多种颜色。但是,有一个解决方案(灵感来自 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
结果是:
单个刻度标签可以使用tex
标记着色,默认情况下为刻度标签启用。它在TickLabelInterpreter
轴的属性中定义。
它提供了两个用于着色文本的命令:
\color{<name>}
,哪里<name>
是颜色名称,如“红色”或“绿色”,以及\color[rgb]{<R>,<G>,<B>}
, 其中<R>
,<G>
和<B>
是 0 到 1 之间的数字,定义 RGB 颜色。这些命令可用于为单个刻度标签着色:
plot(1:10, rand(1,10))
ax = gca;
% Simply color an XTickLabel
ax.XTickLabel{3} = ['\color{red}' ax.XTickLabel{3}];
% Use TeX symbols
ax.XTickLabel{4} = '\color{blue} \uparrow';
% Use multiple colors in one XTickLabel
ax.XTickLabel{5} = '\color[rgb]{0,1,0}green\color{orange}?';
% Color YTickLabels with colormap
nColors = numel(ax.YTickLabel);
cm = jet(nColors);
for i = 1:nColors
ax.YTickLabel{i} = sprintf('\\color[rgb]{%f,%f,%f}%s', ...
cm(i,:), ax.YTickLabel{i});
end
结果是这样的:
该代码在 MATLAB R2016b 和 R2017a 中对我有用。
作为复制整个轴内容的替代方法,也可以通过创建其他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]);