Hi, This is my first post; I'm new to R but am a senior statistical programmer. I have done a lot of graphs using SAS Graph but now am trying to transition to using graphs in R. I'm trying to produce a graph where the colors have three categories- ideally I would like them to be Green for good, Yellow for Questionable, and Red for bad. So I tried to do this in GGPLOT; here is my code: id <- c(1,2,3,4,5) x1 <- c(5,2,3,5,1) x2 <- c(4,1,3,5,1) x3 <- c(5,2,3,5,1) x4 <- c(4,3,3,5,1) x5 <- c(3,1,3,5,1) colorvar <- c(3,1,2,3,1) mydata <- data.frame(id,x1,x2,x3,x4,x5,colorvar) head(mydata) # convert to long format require("reshape") mydata_long <- melt(mydata, id=c("id", "colorvar")) head(mydata_long) require("ggplot2") p <- ggplot(data=mydata_long, aes(x=variable, y=value, group=id, colour = colorvar)) + geom_line() p This works, but I get more colors on the graph than my colorvar has. I have 3 colors on my colorvar, but 5 colors show up on the graph, including 1.5 and 2.5. How do I tell ggplot only to use the 3 colors and not give me a gradient of colors? Also how would I specify the colors that I want, such as the RGB equivalents of green, yellow, and red? My real data will have many more records. -Mary
HI, May be this helps: mydata_long1<-within(mydata_long,{colorvar<-factor(colorvar,levels=1:3)}) require("ggplot2") p <- ggplot(data=mydata_long1, ? ? ? aes(x=variable, y=value, group=id, colour = colorvar)) + ? ? geom_line() p A.K. ----- Original Message ----- From: Mary <mlhoward at avalon.net> To: r-help at r-project.org Cc: Sent: Thursday, January 17, 2013 12:02 PM Subject: Re: [R] Getting discrete colors on plot Hi, This is my first post; I'm new to R but am a senior statistical programmer.? I have done a lot of graphs using SAS Graph but now am trying to transition to using graphs in R. I'm trying to produce a graph where the colors have three categories- ideally I would like them to be Green for good, Yellow for Questionable, and Red for bad. So I tried to do this in GGPLOT; here is my code: id <-? ? ? c(1,2,3,4,5) x1 <-? ? ? c(5,2,3,5,1) x2 <-? ? ? c(4,1,3,5,1) x3 <-? ? ? c(5,2,3,5,1) x4 <-? ? ? c(4,3,3,5,1) x5 <-? ? ? c(3,1,3,5,1) colorvar <- c(3,1,2,3,1) mydata <- data.frame(id,x1,x2,x3,x4,x5,colorvar) head(mydata) # convert to long format require("reshape") mydata_long <- melt(mydata, id=c("id", "colorvar")) head(mydata_long) require("ggplot2") p <- ggplot(data=mydata_long, ? ? ? aes(x=variable, y=value, group=id, colour = colorvar)) + ? ? geom_line() p ? This works, but I get more colors on the graph than my colorvar has.? I have 3 colors on my colorvar, but 5 colors show up on the graph, including 1.5 and 2.5.? How do I tell ggplot only to use the 3 colors and not give me a gradient of colors?? Also how would I specify the colors that I want, such as the RGB equivalents of green, yellow, and red?? My real data will have many more records. -Mary ______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
On 01/18/2013 04:02 AM, Mary wrote:> Hi, > > This is my first post; I'm new to R but am a senior statistical programmer. I have done a lot of graphs using SAS Graph but now am trying to transition to using graphs in R. > > I'm trying to produce a graph where the colors have three categories- ideally I would like them to be Green for good, Yellow for Questionable, and Red for bad. > > So I tried to do this in GGPLOT; here is my code: > > id<- c(1,2,3,4,5) > x1<- c(5,2,3,5,1) > x2<- c(4,1,3,5,1) > x3<- c(5,2,3,5,1) > x4<- c(4,3,3,5,1) > x5<- c(3,1,3,5,1) > colorvar<- c(3,1,2,3,1) > > mydata<- data.frame(id,x1,x2,x3,x4,x5,colorvar) > head(mydata) > > # convert to long format > require("reshape") > mydata_long<- melt(mydata, id=c("id", "colorvar")) > head(mydata_long) > > require("ggplot2") > p<- ggplot(data=mydata_long, > aes(x=variable, y=value, > group=id, colour = colorvar)) + > geom_line() > p > > > This works, but I get more colors on the graph than my colorvar has. I have 3 colors on my colorvar, but 5 colors show up on the graph, including 1.5 and 2.5. How do I tell ggplot only to use the 3 colors and not give me a gradient of colors? Also how would I specify the colors that I want, such as the RGB equivalents of green, yellow, and red? My real data will have many more records. > > -Mary >Hi Mary, I'm not exactly sure what you are doing with the "melt" function, but does: matplot(mydata$id,mydata[,2:6],col=mydata$colorvar+1,type="l") give you something like what you want? Jim
Hi> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r- > project.org] On Behalf Of Mary > Sent: Thursday, January 17, 2013 6:02 PM > To: r-help at r-project.org > Subject: Re: [R] Getting discrete colors on plot > > Hi, > > This is my first post; I'm new to R but am a senior statistical > programmer. I have done a lot of graphs using SAS Graph but now am > trying to transition to using graphs in R. > > I'm trying to produce a graph where the colors have three categories- > ideally I would like them to be Green for good, Yellow for > Questionable, and Red for bad. > > So I tried to do this in GGPLOT; here is my code: > > id <- c(1,2,3,4,5) > x1 <- c(5,2,3,5,1) > x2 <- c(4,1,3,5,1) > x3 <- c(5,2,3,5,1) > x4 <- c(4,3,3,5,1) > x5 <- c(3,1,3,5,1) > colorvar <- c(3,1,2,3,1) > > mydata <- data.frame(id,x1,x2,x3,x4,x5,colorvar) > head(mydata) > > # convert to long format > require("reshape") > mydata_long <- melt(mydata, id=c("id", "colorvar")) > head(mydata_long) > > require("ggplot2") > p <- ggplot(data=mydata_long, > aes(x=variable, y=value, > group=id, colour = colorvar)) + > geom_line() > p > > > This works, but I get more colors on the graph than my colorvar has. I > have 3 colors on my colorvar, but 5 colors show up on the graph, > including 1.5 and 2.5. How do I tell ggplot only to use the 3 colors > and not give me a gradient of colors? Also how would I specify the > colors that I want, such as the RGB equivalents of green, yellow, and > red? My real data will have many more records.Learn to use factors. str(mydata) 'data.frame': 5 obs. of 7 variables: $ id : num 1 2 3 4 5 $ x1 : num 5 2 3 5 1 $ x2 : num 4 1 3 5 1 $ x3 : num 5 2 3 5 1 $ x4 : num 4 3 3 5 1 $ x5 : num 3 1 3 5 1 $ colorvar: num 3 1 2 3 1>Your colorvar is numeric therefore the scale. If you want to make it discrete change it to factor. mydata_long$colorvar<-factor(mydata_long$colorvar) and use your function to see the difference. Regards Petr> > -Mary > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting- > guide.html > and provide commented, minimal, self-contained, reproducible code.