2015-08-17 43 views
6

Ho alcuni dati da tracciare in una figura. I dati sul rumore stanno rovinando altri dati. Come posso cambiare il livello di trasparenza di un dato dato? Nel mio caso, sto usando il comando hold all per tracciare più dati. Una delle soluzioni è di cambiare il LineWidth ma non ho trovato un modo per l'opzione di trasparenza. Ho provato alpha come segueCome impostare l'opacità per un grafico?

plot(noise_x, 'k', 'LineWidth', 1, 'alpha', 0.2)

ma senza fortuna.

risposta

10

Con il introduction of the new graphic engine HG2 in Matlab R2014b, le cose sono abbastanza facile. Uno ha solo bisogno di scavare un po '.

La proprietà color ora contiene un quarto valore di opacità/trasparenza/face-alfa, in modo che tutto ciò che serve a cambiare:

x = linspace(-10,10,100); y = x.^2; 
p1 = plot(x,y,'LineWidth',5); hold on 
p2 = plot(x,-y+y(1),'LineWidth',5); 

% // forth value sets opacity 
p1.Color(4) = 0.5; 
p2.Color(4) = 0.5; 

enter image description here

gradienti di colore sono anche nothing special anymore.

+0

Ho Matlab R2014a. – CroCo

+0

@CroCo Questo è un peccato. Poi devi andare per la risposta [Benoits] (http://stackoverflow.com/a/32059466/2605073) o, se non vuoi usare le funzioni esterne, segui il mio link per [la risposta di Hoki] (http://stackoverflow.com/a/31699594/2605073). – thewaywewalk

+0

Bello, non sapevo di quella proprietà del 4 ° colore grazie! –

2

È possibile utilizzare l'invio patchline da Scambio file, in cui è possibile modificare gli oggetti linea come se fossero oggetti patch; assegnare loro i valori di trasparenza (alfa).

Ecco qualche esempio di codice utilizzando la funzione di:

clc;clear;close all 

n = 10; 
x = 1:n; 

y1 = rand(1,n); 
y2 = rand(1,n); 
y3 = rand(1,n); 

Y = [y1;y2;y3]; 

linestyles = {'-';'-';'--'}; 
colors = {'r';'k';'b'}; 
alphavalues = [.2 .5 .8]; 

hold on 
for k = 1:3 
    patchline(x,Y(k,:),'linestyle',linestyles{k},'edgecolor',colors{k},'linewidth',4,'edgealpha',alphavalues(k)) 
end 

e uscita:

enter image description here

+0

questo non riempie automaticamente i valori dell'asse x. Nel mio caso, ho solo valori y. Questa funzione genera un errore. – CroCo

+1

@CroCo 'x' è solo' x = 1: numel (y) ', non è vero? – thewaywewalk

+0

Questo codice simile al mio caso 'x = 0: 0.01: pi; patchline (sin (x)) '. Questo genera un errore L'indice supera le dimensioni della matrice. Se utilizzo 'plot (sin (x))', non ci sono errori. – CroCo