2013-05-21 53 views
5

是否可以在MATLAB中的一個座標軸上着色單個數字(或一組數字)?如何分配多種顏色來繪製MATLAB中的標記標記?

假設我有一個情節:

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

現在,我可以如使x軸上的數字3變成紅色?

+0

它是您想要修改的x-tick標籤嗎? – Schorsch

+0

是的,它是x-tick標籤。 –

+2

請參閱[這個問題]的答案的第二部分(http://stackoverflow.com/questions/16532176/how-to-add-marker-to-matlab-colorbar/16532405#16532405) - 你應該能夠修改它以更改單個刻度的顏色,而不是使其變爲粗體(並將其用於常規座標軸而不是顏色條)。 – wakjah

回答

8

不幸的是,一個軸對象中的刻度標籤不能有多種顏色。然而,有一個解決方案(啓發this page from MathWorks support site),達到相同的效果。它將現有座標軸與其他只有一個紅色座標軸的座標軸重疊。

下面是一個例子:

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 BTW,意識到你可以在不復制軸的內容的情況下做到這一點,通過將''Color''設置爲none,然後給疊加的軸賦予一個空的''YLim'和同樣的XLim。 – wakjah

+0

@wakjah我沒有關注,我需要設置「Color」爲哪個對象? –

+0

而不是做一個'copyobj',你可以創建第二個'axes',並設置'Color';將其設置爲「none」會使背景變得透明。 – wakjah

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]); 
+0

+1:如果您手動設置'XLim',則不需要'linkaxes'; –

+0

如果您想使用工具欄的縮放功能,您可以這樣做:) – wakjah

+0

Right :)另外,可以做'xlim(ax)'而不是'get(ax,'XLim')',它更短。 –

4

單個刻度標籤可以使用tex markup進行着色,默認情況下,該標籤已啓用刻度標籤。它在軸的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 

這是結果的外觀:

result

的代碼在MATLAB R2016b爲我工作R2017a。

+0

這看起來很棒!我不能測試它,因爲我不再有MATLAB。 ( –

+0

)的確如此,與許多新的便捷圖形功能一樣,這僅適用於HG2,所以對於MATLAB版本> = R2014b。 – Hoki