Color text based on a variable

I am trying to make a plot of 3 properties of chemical elements. I would like the first property on the x-axis, the second on the y-axis, and the third presented by the color of the plot points. Using 'scatter' to do this is trivial, e.g.:
x=1:10;
y=1:10;
c=1:10;
figure
xlim([0 11]);ylim([0 11])
scatter(x,y,50,c,'.')
colorbar
However, I would like the graph to plot the abbreviation for the chemical in question, rather than a standard matlab symbol...
I can do this using the 'text' command:
x=1:10;
y=1:10;
chem={'H','He','Li','Be','B','C','N','O','F','Ne'};
figure
xlim([0 11]);ylim([0 11])
text(x,y,chem)
But I want to color the text labels to correspond to a colorbar representing my third parameter, as they are in the scatter plot.
I cannot find a way to do this - any ideas?
Thanks in advance!

 Akzeptierte Antwort

Fangjun Jiang
Fangjun Jiang am 16 Aug. 2011

0 Stimmen

x=1:10;
y=1:10;
c=1:10;
chem={'H','He','Li','Be','B','C','N','O','F','Ne'};
h=figure(1);
xlim([0 11]);ylim([0 11]);
scatter(x,y,50,c,'.')
colorbar;
col=get(h,'colormap');
h_text=text(x,y,chem);
for k=1:length(h_text)
set(h_text(k),'color',col(k*6,:))
end

3 Kommentare

Oscar Branson
Oscar Branson am 16 Aug. 2011
Thanks!
Oscar Branson
Oscar Branson am 16 Aug. 2011
P.S. For anyone looking at this later on and wondering why there's a '*6' in the line:
set(h_text(k),'color','col(k*6,:))
it's because the colormap is a 64 row array of 3-column RGB values. As we have 10 labels here, multiplying k by 6 will evenly space the colors across the colormap. A more adaptable code is:
lcol=size(colormap,1);
for k=1:length(h_text)
set(h_text(k),'color',col(k*round(c(k)*lcol/max(c)),:))
end
Fangjun Jiang
Fangjun Jiang am 16 Aug. 2011
Nice add-on!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Color and Styling finden Sie in Hilfe-Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by