2011-05-16 18 views
7

Los estados MATLAB bar documentation lo siguiente:¿Cómo puedo crear un diagrama de barras utilizando estilos agrupados y apilados en MATLAB?

de barras (..., 'estilo') especifica el estilo de las barras. 'estilo' está 'agrupado' o 'apilado'. El modo de visualización predeterminado es 'agrupado'.

Sin embargo, me gustaría lograr ambos al mismo tiempo. Permítanme desarrollar con un ejemplo:

Y = [1.0 0.5 0.7 
    2.0 1.5 2.0 
    5.0 4.0 5.0 
    4.0 4.0 4.5 
    3.0 2.0 2.0]; 

bar(Y,'group'); 

Este código produce el siguiente agrupados parcela BarSeries, con 5 juegos diferentes de 3 bares agrupados:

enter image description here

bar([repmat(0.5,5,1) Y(:,1)-0.5],'stack'); 

Y esta El código produce la siguiente gráfica apilada de, usando solo la primera columna de la matriz definida anteriormente Y:

enter image description here

me gustaría fusionar estos dos, para obtener una parcela BarSeries que se agrupa y se apilan al mismo tiempo. Entonces, el resultado deseado sería como la primera imagen y cada una de las tres barras de un conjunto se apilaría como la segunda imagen.

+0

Podría publicar un ejemplo de un conjunto de datos que desea que se muestre así? Solo me cuesta entender por qué querrías hacer eso. – abcd

+1

Estoy tratando de mostrar estas dos cosas en un gráfico: 1) costo por cada mes utilizando tres métodos diferentes (eje x son meses y hay 3 * 12 barras diferentes) 2) desglose del costo de cada uno de estos, como el costo total se calcula como una suma de dos elementos (vamos a llamarlos parte estática y dinámica) Al hacer esto, puedo mostrar en un gráfico la distribución de partes estáticas y dinámicas en el costo y la reducción de costos generales mediante diferentes métodos . –

Respuesta

6

No tengo forma de saber BAR para trazar una combinación de gráficos de barras agrupadas/apiladas para usted. Sin embargo, puede hacerlo usted mismo agregando filas de ceros a sus datos Y donde desee separar grupos de barras, luego modifique el eje x tick marks y tick labels en consecuencia. He aquí un ejemplo:

>> Y = [1 2 3; ... %# Sample data 
     2 3 4; ... 
     3 4 5; ... 
     4 5 6; ... 
     5 6 7; ... 
     6 7 8; ... 
     7 8 9; ... 
     8 9 10; ... 
     9 10 11]; 
>> newY = reshape([reshape(Y,3,[]); zeros(1,numel(Y)/3)],[],3) %# Add zeroes 
                   %# for spacing 
newY = 

    1  2  3 
    2  3  4 
    3  4  5 
    0  0  0 %# <--- Note zero rows 
    4  5  6 
    5  6  7 
    6  7  8 
    0  0  0 
    7  8  9 
    8  9 10 
    9 10 11 
    0  0  0 

>> bar(newY,'stacked'); %# Create a stacked histogram 
>> set(gca,'XLim',[0 12],'XTick',2:4:10,'XTickLabel',1:3); %# Modify axes 

Y aquí está la cifra resultante:

enter image description here

+0

Gracias, eso funcionó. –

4

grupo vs apilados es una -o cualquier tipo de información. tiene que ser creativo para hacer lo que quiere hacer:

bar(Y,'stacked','BarWidth',0.3); 
hold; 
X = Y.*abs(randn(5,3)); 
bar(X,'stacked','BarWidth',0.3, 'Xdata', 1.3:1:5.3); 
Z = Y.*abs(randn(5,3)); 
bar(X,'stacked','BarWidth',0.3, 'Xdata', 0.7:1:4.7); 

rápido resumen: empezar con los datos apilados, asegúrese de que el barwidth es lo suficientemente pequeño como para caber correctamente los datos a la gráfica, mantenga su trama, a continuación, añadir el otro gráfico de barras con un desplazamiento de datos (Xdata).

enter image description here

Cuestiones relacionadas