Basic Imagesc Question -- 2D Matrix

2 visualizaciones (últimos 30 días)
mathworks2011
mathworks2011 el 9 de Sept. de 2011
I have a 2D matrix. I wish to plot it in a particular way.
The first col, I wish to represent the values on the y-axis. The second col, I wish to use to color code the plotted values.
The matrix changes over time, t. Time runs along the x-axis.
for t = 1: T
c = NaN(2,5);
c(1,:) = rand(1,5); %this vector should be the y-axis
c(2,:) = randi(10,1,5); %this vector should color code c(1,:)
c = sort(c,2);
imagesc(); %??
clear c;
end
I think this is very simple, but just cant get it working! Can anyone help? thank you.

Respuesta aceptada

mathworks2011
mathworks2011 el 22 de Sept. de 2011
patch.m is the correct function to use.

Más respuestas (1)

Walter Roberson
Walter Roberson el 9 de Sept. de 2011
I am unclear as to what your x axis is?
Your sort(c,2) sorts each row independently, which destroys any implicit link you might have of the color in c(2,K) corresponding to the y in c(1,K). Is that what you want? Or were you trying to sort by y value but preserve the color mapped to each y ?
I was thinking that perhaps your x axis is implicitly the column index in to the matrix, but if that is the case then it would not seem right to be sorting the y ?
You effectively have a vector of y values and a vector of corresponding colors, but imagesc() is for rendering 2D matrices colored per-pixel. Is a bar graph perhaps a better representation for your data?
  2 comentarios
mathworks2011
mathworks2011 el 9 de Sept. de 2011
x-axis is time. As per variable t.
Sorry for the confusion. This is just a min working example, hence c being generated on the fly and the removal of the link as you note. This does not happen with the real data.
The real data has a structure where the two vectors are linked.
What I want to do is plot the values from c(1,:) and colour them using the values from c(2,:).
Can you explain your suggestion of a bar chart. I dont think this will do it.
Walter Roberson
Walter Roberson el 9 de Sept. de 2011
If y is a _row_ vector, then bar([y;nan(1,length(y))]) will produce a bar chart in which every bar is colored separately. The color order would, by default, be the color order of the first N entries of the current color map. The bar chart will return an hggroup that has one child patch object per bar (in *this* situation); you could change the FaceColor property or perhaps the CData property in order to set the colors you want.
Note that if you take this approach, you will want to fetch xlim(), subtract 1 from the maximum value, and set that as the new xlim: you would do this because bar() would initially set the xlim to allow a full space for the bar group whose data is all nan.
There are other approaches using bar(), but this way is cleaner.
You could also simulate bar() using line() or plot(), together with fill(), but the way I outline aboe would probably be less effort.

Iniciar sesión para comentar.

Categorías

Más información sobre Bar Plots en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by