5

是否可以在 MATLAB 中的一个轴上为单个数字(或一组数字)着色?

假设我有一个情节:

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

现在,我可以将 x 轴上的数字 3 设为红色吗?

4

3 回答 3

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

结果是:

结果

于 2013-05-21T18:35:30.627 回答
8

单个刻度标签可以使用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 中对我有用。

于 2017-09-12T16:15:17.683 回答
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]);
于 2013-05-21T18:54:58.763 回答