Home > Blockchain >  Forcing specific plot symbols for points in R ggplot2
Forcing specific plot symbols for points in R ggplot2

Time:07-10

I am trying to specify manually, the shape of data points in r ggplot2 but can't seem to get it to work. Below is a sample example

p.est<- c(1.65, 1.55, 0.70, 1.61, 1.25)
lcl<-c(1.25, 1.10, 0.50, 1.20, 1.02)
ucl<-c(2.20, 2.05, 0.90, 2.20, 1.50)
toy.data <- tibble(zc = zc, p.est = p.est, p.lcl = p.lcl, p.ucl = p.ucl)

Assume I want two types of plot symbols for the five points, I use scale_shape_manual() in ggplot2 but it doesn't seem to work. Below is my sample code and the resulting plot attached. I'm trying to modify so the plot symbols for the points correspond to 5 which is a diamond and 16 which is a circle.

ggplot(toy.data, aes(zc,  p.est, ymin = p.lcl, ymax = p.ucl))   
  scale_shape_manual(values = c(5, 16, 5, 5, 16)) 
  geom_pointrange(position = position_dodge(width = 0.1)) 
  geom_hline(yintercept = 1) 
  ylim(0.5, 2.5)

enter image description here

CodePudding user response:

You can add shape = factor(p.est). Otherwise scale_shape doesn't apply to anything.

zc    <- c(1,2,3,4,5)
p.est <- c(1.65, 1.55, 0.70, 1.61, 1.25)
p.lcl   <-c(1.25, 1.10, 0.50, 1.20, 1.02)
p.ucl   <-c(2.20, 2.05, 0.90, 2.20, 1.50)

toy.data <- tibble(zc = zc, 
                   p.est = p.est, 
                   p.lcl = p.lcl, 
                   p.ucl = p.ucl)

ggplot(toy.data, aes(zc,  p.est, ymin = p.lcl, ymax = p.ucl, shape = factor(p.est)))   
  scale_shape_manual(values = c(5, 16, 5, 5, 16))  
  geom_pointrange(position = position_dodge(width = 0.1))  
  geom_hline(yintercept = 1)  
  ylim(0.5, 2.5)
  • Related