Ggplot color dots based on specific color codes

Can ggplot be used for color points based on predefined standard color codes contained in a data frame?

Below are some examples of data and code that will help formulate my question.

tick <- c("GE","APPL","GM","BTU","WMT","JPM","LUV") price <- c(22,900,20,22,80,31,35) volume<- c(300,500,100,107,400,300,325) df1 <- data.frame(ticker=tick, price=price, volume=volume) # Here is a sample chart without colors: p <- ggplot(df1, aes(volume, price))+ geom_point(); p # I could use astetics and color_brewer to color points by ticker. # But since I want to have my colors uniform across multiple plots # outside of this script, I have specified the colors to always # be used for certian tickers ## color speciciations ## http://wiki.stdout.org/rcookbook/Graphs/Colors%20(ggplot2)/#rcolorbrewer-palette-chart tick<-c("GE","APPL","GM","BTU","WMT") ccodes<-c("#3399FF", "#FF000", "#CC00FF", "#993300", "#66CC00") cnames<-c("blue", "red", "purple", "brown", "green") df2=data.frame(ticker=tick, color.codes=ccodes, color.names=cnames) ## merge color specifcations into data df3 <-merge(df1,df2, by=("ticker"), all.x=TRUE, all.y=TRUE) # since I wont be able to specify colors for all the data will be # be plotting I need to speficy a default color, in this case black. # this is where I start to run into trouble. For some reason the # following line dosent work as i would have intended as it dosent # correctly bring back the defined colors. df3$color.code.new <- ifelse(is.na(df3$color.codes), "#000000", df3$color.codes) # Once that is corrected, I would like to use the new color codes # in df3 as the colors of the points. p <- ggplot(df3, aes(volume, price))+ geom_point(); p 

Everyone is welcome any guide.

 ##################################################################### ##### Edit below - to test ##################################################################### ccodes<-c("#990000", "#990000", "#990000", "#990000", "#990000") 
+2
source share
1 answer

The line you claimed doesn't work:

 df3$color.code.new <- ifelse(is.na(df3$color.codes), "#000000", df3$color.codes) 

works for me, although I think you missed the number in one of your six-color colors. Once you straightened it, you just want to use scale_colour_manual with something like this:

 tick <- c("GE","APPL","GM","BTU","WMT","JPM","LUV") price <- c(22,900,20,22,80,31,35) volume<- c(300,500,100,107,400,300,325) df1 <- data.frame(ticker=tick, price=price, volume=volume) tick<-c("GE","APPL","GM","BTU","WMT") ccodes<-c("#3399FF", "#FF0000", "#CC00FF", "#993300", "#66CC00") cnames<-c("blue", "red", "purple", "brown", "green") df2=data.frame(ticker=tick, color.codes=ccodes, color.names=cnames) ## merge color specifcations into data df3 <-merge(df1,df2, by=("ticker"), all.x=TRUE, all.y=TRUE) df3$color.code.new <- ifelse(is.na(df3$color.codes), "#000000", df3$color.codes) p <- ggplot(df3, aes(volume, price,colour = ticker))+ geom_point() p + scale_colour_manual(breaks = df3$ticker,values = df3$color.code.new) 

enter image description here

+5
source

All Articles