是否可以在MATLAB中的一个轴上为单个数字(或一组数字)着色?
假设我有一个情节:
plot(1:10, rand(1,10))
Run Code Online (Sandbox Code Playgroud)
现在,我可以将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
Run Code Online (Sandbox Code Playgroud)
结果是:

小智 8
单个刻度标签可以使用texmarkup着色,默认情况下为刻度标签启用。它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
Run Code Online (Sandbox Code Playgroud)
这就是结果的样子:
该代码在 MATLAB R2016b 和 R2017a 中对我有用。