Skip to content

Getting discrete colors on plot

4 messages · mary, arun, Jim Lemon +1 more

#
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 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
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