James.Dell at csiro.au
2007-Nov-30 03:44 UTC
[R] using color coded colorbars for bar plots
Hello R Fundi, The poetic title of this post is a request for help in regard to a "simple" plotting question. I have displayed the mean observations of a series variables using barplot(). On the same figure I have colored the bars to represent the Standard deviation of each variable using color.scale(). Now I wish to add a graduated colorbar (legend) that corresponds to the colors representing the standard devitation. Simple. Or so it seemed. Has anyone attempted to do this before? Thanks for your time. Jim Dell
James.Dell at csiro.au wrote:> > Hello R Fundi, > > The poetic title of this post is a request for help in regard to a > "simple" plotting question. > I have displayed the mean observations of a series variables using > barplot(). On the same figure I have colored the bars to represent the > Standard deviation of each variable using color.scale(). Now I wish to > add a graduated colorbar (legend) that corresponds to the colors > representing the standard devitation. Simple. Or so it seemed. Has > anyone attempted to do this before? >Hi Jim (no, I'm not writing to myself), Have you looked at color.legend? Jim
James.Dell at csiro.au wrote:> Hi Jim, > Thanks for getting back to me so quickly. > > I did look at color.legend, but that seems to plot colored blocks for > the observations (in this case the mean) and not for the color.scale > (which represents variance in this case). Unless there is a > functionality that I haven't discovered yet. If you have created a > similar plot and would be happy to share some code I'd be very > apprecitive. >Part of the problem is that you seem to have two names for the same variable in your code (Standard.Deviance and Standard.Deviation - unless that was a typo). Notice how I calculate the colors twice, the second time with a simple integer sequence to get the right number of evenly spaced colors. In your example, you calculated the colors for RankVar$Standard.Deviance again, but you don't need all those colors for the legend, and they're in the wrong order anyway. What is generally wanted for a color legend is the minimum and maximum values on the ends and a few linear interpolations in the middle. barplot(RankVar$MeanDecreaseAccuracy, col=color.scale(RankVar$Standard.Deviance, c(0,1,1),c(1,1,0),0), ylab = "Variable Importance", names.arg = rownames(RankVar), cex.names = .7, main = "Variables from RandomFishForest", sub= "Mean Decrease in Accuracy") col.labels<- c("Low","Mid","High") color.legend(6,13,11,14,col.labels, rect.col=color.scale(1:5,c(0,1,1),c(1,1,0),0)) Jim