2013-05-21 13 views
5

È possibile colorare un singolo numero (o una serie di numeri) su uno degli assi in MATLAB?Come posso assegnare più colori per spuntare le etichette nei grafici in MATLAB?

Supponiamo che io sono un complotto:

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

Ora, posso per esempio rendere il numero 3 sull'asse X rosso?

+0

È l'etichetta x-tick che si desidera modificare? – Schorsch

+0

Sì, è l'etichetta x-tick. –

+2

Per favore vedi la seconda parte della risposta a [questa domanda] (http://stackoverflow.com/questions/16532176/how-to-add-marker-to-matlab-colorbar/16532405#16532405) - dovresti essere in grado per modificarlo per cambiare il colore di un singolo segno di spunta anziché renderlo in grassetto (e usarlo su un asse normale invece che su una barra colorata). – wakjah

risposta

8

Sfortunatamente, non è possibile avere più colori per le etichette di graduazione in un oggetto assi. Tuttavia, esiste una soluzione (ispirata allo this page from MathWorks support site) che raggiunge lo stesso effetto. Sovrappone gli assi esistenti a un altro asse che ha solo un segno di spunta rosso.

Ecco un esempio:

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 

Il risultato è:

result

+2

+1 mi ha battuto al punch: P BTW, ho capito che puoi fare questo senza copiare il contenuto degli assi, impostando ''Color'' su none, e quindi dando agli assi sovrapposti un' 'YLim' vuoto' ' e lo stesso ''XLim''. – wakjah

+0

@wakjah Non sto seguendo, quale oggetto ho bisogno di impostare ''Colore''? –

+0

Invece di fare un 'copyobj', puoi semplicemente creare un secondo' axes' e impostare 'Color' su quello; impostandolo su "none" renderà lo sfondo trasparente. – wakjah

3

In alternativa copiando l'intero contenuto assi, è possibile farlo anche creando ulteriori axes oggetti :

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: non hai bisogno di 'linkaxes' se stai impostando manualmente' XLim';) –

+0

Lo fai se vuoi usare lo zoom della barra degli strumenti :) – wakjah

+0

Giusto :) Inoltre, tu può fare 'xlim (ax)' invece di 'get (ax, 'XLim')', è più corto. –

4

Le singole etichette di graduazione possono essere colorate utilizzando tex markup, che è abilitato per le etichette di graduazione per impostazione predefinita. È definito nella proprietà TickLabelInterpreter dell'asse.

Esso fornisce due comandi per il testo colorazione:

  • \color{<name>}, dove <name> è un nome colore come “rosso” o “verde”, e
  • \color[rgb]{<R>,<G>,<B>}, dove <R>, <G> e <B> sono numeri compresi tra 0 e 1 e definire un colore RGB.

Questi comandi possono essere utilizzati per colorare singole etichette delle tacche:

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 

e in questo modo il risultato appare:

result

Il codice ha funzionato per me in MATLAB R2016b e R2017a.

+0

Sembra fantastico! Non posso testarlo però, dal momento che non ho più MATLAB. :( –

+0

Questo è davvero molto bello.come con molte nuove utili funzionalità grafiche, questo funziona solo per HG2, ovviamente, per le versioni MATLAB> = R2014b. – Hoki

Problemi correlati