Color 2D plot according to external vector

1 visualización (últimos 30 días)
Sebastien
Sebastien el 9 de Dic. de 2011
I have a (10 x 501) matrix Y of, let's say, absorbances values from spectroscopic data. I have a (1 x 501) vector X of, let's say, corresponding wavenumbers. And I have a (1 x 10) vector Z of properties referring to the samples for which the Y values where recorded. I simply want to do plot(X,Y) and color the different lines according to the corresponding values of Z, i.e. a line corresponding to high Z value will have a different color from a line for which the Z value is small. But 2 samples with same Z values will have the same color for the 2 lines.
Basically I would like to reproduce what is available with scatter(X,Y,size,Z)....but for 2D plot and lines. Thanks for your help

Respuestas (3)

Daniel Shub
Daniel Shub el 9 de Dic. de 2011
Something like this might work:
Create some dummy data:
x = sort(randn(1, 501));
y = randn(10, 501)+repmat(5*(1:10)', 1, 501);
z = rand(10,1)*100;
Plot the data
colorMap = jet(length(unique(z)));
set(gcf, 'ColorMap', colorMap);
h = plot(x,y);
Change the color of the lines:
[~, ~, colorNo] = unique(z);
for icolor = 1:length(unique(z))
set(h(colorNo == icolor), 'color', colorMap(mod(icolor-1, length(colorMap))+1, :))
end
set(gca, 'CLim', [min(z), max(z)])
colorbar

Sebastien
Sebastien el 9 de Dic. de 2011
Hi, Thanks for your reply. However, at the end of the code, if I do colorbar, it goes from 1 to 64 range....while the z data in your example are between 1 and 4.... Basically, if I have 4 colors for the lines (which I have), I would expect to have only 4 colors in the colorbar (which I haven't).... Also your z data are integers, which are even replicated, while my data data would be values (e.g. percentages) with 2 decimals and with or without duplicated.... Thanks for your help.
  1 comentario
Daniel Shub
Daniel Shub el 9 de Dic. de 2011
You should really add this as a comment to my answer. See my edited answer.

Iniciar sesión para comentar.


Sebastien
Sebastien el 9 de Dic. de 2011
If I can add....
x=[100:600];
y=rand(25,501);
z=rand(10,1)*100;
And I want to plot (x,y) with the lines having a color related to the z values (from red=high z values to blue = low z values for instance if we keep a jet colormap).
Thanks for your help.
  3 comentarios
Sebastien
Sebastien el 13 de Dic. de 2011
Many thanks for the edited code...
However in your code, the colorbar now displays 10 levels, which is fine....but which do not reflect at all the z values....
In the example, z values range from 0 to 100, while colorbar goes from 1 to 11....I would really like to have the colorbar reflecting the z values and the colors of the lines reflecting as well the intensity of the z values....Basically what scatter(X,Y,size,Z) does ....but for 2D plot and lines
Daniel Shub
Daniel Shub el 13 de Dic. de 2011
I edited the code again ...

Iniciar sesión para comentar.

Categorías

Más información sobre Colormaps 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