2010-05-12 16 views
6

Quale sarebbe il modo più semplice per ombreggiare leggermente (o tratteggiare o qualsiasi cosa per impostarlo diversamente dal resto) un'area in un grafico(), sotto una curva y = x^2, per esempio ?Ombreggiatura di un'area limitata da una curva

x = 0:pi/10:2*pi; 
y = x.^2.; 
plot(x,y); 

risposta

11

area(x,y) dovrebbe fare il trucco. Non sono sicuro che quella classe abbia una proprietà FaceAlpha.

MODIFICA: Sfortunatamente, la classe area non ha una proprietà FaceAlpha. Ma si può ovviare a questo e modificare la patch direttamente:

x=0:pi/10:2*pi; 
y=x.^2; 
H=area(x,y); 
h=get(H,'children'); 
set(h,'FaceAlpha',0.5); %#Tada! 

EDIT2: Per ombreggiare l'area sopra la curva, è possibile utilizzare un secondo terreno area con un riempimento bianco. È una specie di kludge, ma dovrebbe funzionare. Si riparte:

x=0:pi/10:2*pi; 
y=x.^2; 
y2=max(y)*ones(size(y)); 
hold on 
H1=area(x,y2); 
H2=area(x,y); 
set(H2,'FaceColor',[1 1 1]); 
axis tight 

o edificio sulla soluzione di Jason S, utilizzare l'ingresso baseval per ombreggiare di sopra della curva:

x=0:pi/10:2*pi; 
y=x.^2; 
baseval=max(y); 
H=area(x,y,baseval); 
h=get(H,'children'); 
set(h,'FaceAlpha',0.5,'FaceColor',[0 1 0]); 
axis tight 
+0

Mi sto ancora abituando ai modi di Matlab, quindi scusami se questa semplice domanda. Ma dove imposti il ​​colore in quelle 3 linee? E per esempio, potresti ombreggiare un'area sopra la curva con quel principio? – Rook

+0

area di ombra sopra la curva: non c'è bisogno di fare kludge. Vedi la mia risposta. –

+0

@Jason S: buon punto. Non sapevo che avresti potuto stabilire il punto di partenza sopra i punti della curva! +1 – Doresoom

5

Un esempio supplementare per elaborare il post di Doresoom:

x=0:pi/50:2*pi; 
y1=x.^2; 
y2=10+5*sin(3*x); 
baseval1=20; 
baseval2=3; 
clf; 
hold on; 
H1=area(x,y1,baseval1); 
H2=area(x,y2,baseval2); 
hold off; 
h=get(H1,'children'); 
set(h,'FaceAlpha',0.5,'FaceColor',[1 0.5 0]); 
    % set color to orange, alpha to 0.5 
h=get(H2,'children'); 
set(h,'FaceAlpha',0.5,'FaceColor',[0.85 1 0.25]); 
    % set color to yellow-green, alpha to 0.5 

Ma dove si imposta il colore?

h è un handle di un patch (un'area compilata); se digiti get (h) puoi vedere tutte le sue proprietà. Il MATLAB docs on patch properties spiega questi aspetti.

E come si può ad esempio ombreggiare un'area sopra la curva con tale principio?

area crea una patch tra un valore di base e una curva. Non sembra che ci sia un modo semplice per creare un'area tra due curve.

0

senza fare confusione con children, è inoltre possibile:

x = 0:pi/10:2*pi; % from your example 
y = x.^2.; % from your example 

H=area(x,y); 
set(H(1),'FaceColor','k'); 
alpha(.5); 

ha funzionato per me, ma anche aiutato con alcuni legend problemi che stavo avendo.

. Per dare un calcio a una domanda morta

Problemi correlati