two stem comando color matlab plot fill area

stem - plot matlab



MATLAB, llenando el área entre dos conjuntos de datos, líneas en una figura (4)

Desea observar la función patch () y obtener puntos para el inicio y el final de la línea horizontal:

x = 0:.1:2*pi; y = sin(x)+rand(size(x))/2; x2 = [0 x 2*pi]; y2 = [.1 y .1]; patch(x2, y2, [.8 .8 .1]);

Si solo desea el área completa para una parte de los datos, deberá truncar los vectores xey para incluir solo los puntos que necesita.

Tengo una pregunta sobre el uso de la función de area ; o tal vez otra función esté en orden ... Creé este diagrama a partir de un archivo de texto grande:

El verde y el azul representan dos archivos diferentes. Lo que quiero hacer es rellenar el área entre la línea roja y cada carrera, respectivamente. Puedo crear un diagrama de área con una idea similar, pero cuando los represento en la misma figura, no se superponen correctamente. Esencialmente, 4 parcelas estarían en una figura.

Espero que esto tenga sentido.


Partiendo de la respuesta de @ gnovice, puedes crear gráficos rellenos con sombreado solo en el área entre las dos curvas. Simplemente use fill junto con fliplr .

Ejemplo:

x=0:0.01:2*pi; %#initialize x array y1=sin(x); %#create first curve y2=sin(x)+.5; %#create second curve X=[x,fliplr(x)]; %#create continuous x value array for plotting Y=[y1,fliplr(y2)]; %#create y values for out and then back fill(X,Y,''b''); %#plot filled area

Al voltear la matriz x y concatenarla con la original, saldrá, bajará, retrocederá y luego hacia arriba para cerrar ambas matrices en un polígono completo de muchos y muchos lados.


Personalmente, me parece elegante y conveniente para envolver la función de relleno. Para rellenar dos vectores de fila de igual tamaño Y1 e Y2 que comparten el soporte X (y el color C):

fill_between_lines = @(X,Y1,Y2,C) fill( [X fliplr(X)], [Y1 fliplr(Y2)], C );


Puede lograr esto utilizando la función FILL para crear polígonos rellenos en las secciones de sus parcelas. Deberá trazar las líneas y los polígonos en el orden en que desea que se apilen en la pantalla, empezando por el más inferior. Aquí hay un ejemplo con algunos datos de muestra:

x = 1:100; %# X range y1 = rand(1,100)+1.5; %# One set of data ranging from 1.5 to 2.5 y2 = rand(1,100)+0.5; %# Another set of data ranging from 0.5 to 1.5 baseLine = 0.2; %# Baseline value for filling under the curves index = 30:70; %# Indices of points to fill under plot(x,y1,''b''); %# Plot the first line hold on; %# Add to the plot h1 = fill(x(index([1 1:end end])),... %# Plot the first filled polygon [baseLine y1(index) baseLine],... ''b'',''EdgeColor'',''none''); plot(x,y2,''g''); %# Plot the second line h2 = fill(x(index([1 1:end end])),... %# Plot the second filled polygon [baseLine y2(index) baseLine],... ''g'',''EdgeColor'',''none''); plot(x(index),baseLine.*ones(size(index)),''r''); %# Plot the red line

Y aquí está la figura resultante:

También puede cambiar el orden de apilamiento de los objetos en la figura después de trazarlos modificando el orden de los identificadores en la propiedad ''Children'' del objeto de ejes. Por ejemplo, este código invierte el orden de apilamiento, ocultando el polígono verde detrás del polígono azul:

kids = get(gca,''Children''); %# Get the child object handles set(gca,''Children'',flipud(kids)); %# Set them to the reverse order

Finalmente, si no sabe exactamente en qué orden desea apilar sus polígonos con anticipación (es decir, uno de ellos podría ser el más pequeño, lo que probablemente quiera en la parte superior), entonces podría ajustar la propiedad ''FaceAlpha'' para que o ambos polígonos aparecerán parcialmente transparentes y mostrarán el otro debajo de él. Por ejemplo, lo siguiente hará que el polígono verde sea parcialmente transparente:

set(h2,''FaceAlpha'',0.5);