Matlab - problema con bar stacked

   
Vista:

problema con bar stacked

Publicado por Pablo (2 intervenciones) el 15/01/2008 12:04:58
Hola a todos,

Tengo un problema con el comando de graficos bar stacked.

Estoy intentado hacer un gráfico de barras en el que para cada momento del tiempo tengo varios valores. Esto, en principio lo puede hacer sin problemas matlab con el comando bar, a partir de una matriz de datos, en la que cada fila se refiera a un momento del tiempo (eje x) y cada columna al valor que toma cada variable. El comando bar por defecto hace el gráfico poniendo una barra para cada variable en cada momento del tiempo, de forma que si la matriz tiene tres vectores, el gráfico tiene 3 barras en paralelo en cada momento. Alternativamente, se puede poner la opción "stacked" que quiere decir que el gráfico tiene una sola barra, que acumula verticalmente (u horizontalmente) los valores de la variable.

El problema es que cuando los valores de la variable son del mismo signo, lo hace bien, pero en cuanto uno de ellos es de signo contrario, el programa se vuelve loco y no pone los valores de la variable sino una media o algo así.

¿Sabe alguien porque pasa esto y si hay una solución?

Muchas gracias,

Adjunto el código de matlab que hace un gráfico muy sencillo para que veáis a lo que me refiero.

Y = [-5 1 2
8 -3 7
9 6 8
5 5 5
4 2 3];

bar(Y,'stack')

Como veréis las dos primeras barras deberían tomar valores positivos y negativos. Sin embargo en la primera es toda negativa y la segunda positiva y además no se corresponde con los valores
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema con bar stacked

Publicado por Kike (304 intervenciones) el 15/01/2008 15:44:51
Y = [-5 1 2;8 -3 7;9 6 8;5 5 5;4 2 3];

[filas,columnas]=size(Y);

for k=1:filas
for n=1:columnas
if Y(k,n)<=0
Y2(k,n)=0;
Y3(k,n)=Y(k,n);
else
Y2(k,n)=Y(k,n);
Y3(k,n)=0;
end
end
end

% Ahora tengo Y2 que tiene valores no negativos, y Y3 que tiene valores no
% positivos, y los graficaré, y de esta manera los valores positivos no se
% interferirán con los negativos:

bar(Y2,'stack');
hold on;
bar(Y3,'stack');
grid on;
title('Valores de la Matriz Y');
xlabel('Tiempo');
ylabel('Amplitud');
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con bar stacked

Publicado por pablo (2 intervenciones) el 15/01/2008 15:57:57
Kike,

Un millón de gracias, eso era exactamente lo que necesitaba. Además, con poner "plot(x);" después de "bar(Y3,'stack'); ", donde X es un vector con la suma de las contribuciones para cada valor, te dibuja la linea de sumas.

De todas maneras también había hecho esta pregunta al support de matlab y me han dicho que matlab no permite hacer gráficos bar stacked cuando hay valores positivos y negativos. Pero dado lo simple de tu respuesta, me parece alucinante que no lo hayan incluido en el comando bar stacked.

Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar