如何在MATLAB中的绘图中为多个颜色分配多个颜色?

Ste*_*fin 5 matlab plot

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

假设我有一个情节:

plot(1:10, rand(1,10))
Run Code Online (Sandbox Code Playgroud)

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

Eit*_*n T 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
Run Code Online (Sandbox Code Playgroud)

结果是:

结果

  • +1击败了我:P BTW,意识到你可以做到这一点而不复制轴的内容,通过将''Color'设置为none,然后给重叠的轴一个空的''YLim'`和同样的''XLim'. (2认同)
  • @wakjah我更喜欢复制,否则你需要同步轴(_e.g_和`linkaxes`),以便它们正确重叠.谢谢你提醒我"'颜色'",我注意到我的刻度线消失了,并将其设置为"'无'"修复它:) (2认同)

小智 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 中对我有用。