[R] ggplot2 scale_shape_manual with large numbers instead of shapes

Hadley Wickham h.wickham at gmail.com
Thu Aug 27 23:59:39 CEST 2015


Something like this?

df <- data.frame(
  x = runif(30),
  y = runif(30),
  z = factor(1:30)
)

ggplot(df, aes(x, y)) +
  geom_point(aes(shape = z), size = 5) +
  scale_shape_manual(values = c(letters, 0:9))

Hadley

On Thu, Aug 27, 2015 at 4:48 PM, Marian Talbert <mtalbert at usgs.gov> wrote:
> I'm trying to produce a plot with climate data in which colors describe one
> aspect of the data (emissions scenario) and numbers rather than shapes show
> the model used (there are 36 models for one emissions scenario and 34 for
> the other).  I'm trying to use numbers rather than symbols because there are
> 36 climate models and thus not enough symbols.  Numbering seems more
> consistent than some combo of letters and symbols.  I couldn't figure out
> how to define my own shapes as numbers 1 to 36 using scale_shape_manual so
> I'm adding the numbers with annotate.  The problem is that I'd like a second
> legend linking the numbering to the long model names but am having a hard
> time with this.  I've created a toy example below to make this more clear.
> p1 below was my original plot and I'd like p2 only with the second legend
> linking numbers to long model names any suggestions?
>
> library(ggplot2)
>
>
> Dat<-data.frame(Temp=c(rnorm(36,0,1),rnorm(36,1.5,1)),Precp=c(rnorm(36,0,1),rnorm(36,1,1)),
>
> model=factor(rep(paste("LongModelName",c(letters,1:10),sep="_"),times=2)),
>       Emissions=factor(rep(c("RCP 4.5","RCP 8.5"),each=36)))
>  EmissionsCol<-c("goldenrod2","red")
>  Pquants <- aggregate(Dat$Precp,list(RCP=Dat$Emissions),
>                quantile,c(.25,.5,.75),na.rm=TRUE)
>  Tquants <- aggregate(Dat$Temp,list(RCP=Dat$Emissions),
>                quantile,c(.25,.5,.75),na.rm=TRUE)
>  Quants<-data.frame(Emissions=Tquants$RCP,Tmin=Tquants[[2]][,1],
>           TMedian=Tquants[[2]][,2],Tmax=Tquants[[2]][,3],
>
> Pmin=Pquants[[2]][,1],PMedian=Pquants[[2]][,2],Pmax=Pquants[[2]][,3])
>
> #Original Plot
> Labels<-Dat$model
>  p1 <- ggplot()+geom_point(Dat,mapping=aes(x=Temp,y=Precp,colour=Emissions),
>      size=.1)+
>  scale_colour_manual(values=c("#EEB422BE","#FF0000BE"),guide="none")+
>   annotate("text", label=Labels, x=Dat$Temp,
> y=Dat$Precp,colour=c("#EEB422BE","#FF0000BE")[Dat$Emissions]) +
>   guides(fill=guide_legend(reverse=TRUE))+theme(axis.title =
> element_text(size = 2)) +
>
> geom_segment(data=Quants,mapping=aes(x=Tmin,y=PMedian,xend=Tmax,yend=PMedian),size=2,colour="black")+
>
> geom_segment(data=Quants,mapping=aes(x=TMedian,y=Pmin,xend=TMedian,yend=Pmax),size=2,colour="black")+
>
> geom_segment(data=Quants,mapping=aes(x=Tmin,y=PMedian,xend=Tmax,yend=PMedian,colour=Emissions),size=1)+
>
> geom_segment(data=Quants,mapping=aes(x=TMedian,y=Pmin,xend=TMedian,yend=Pmax,colour=Emissions),size=1)+
>
> geom_point(data=Quants,mapping=aes(x=TMedian,y=PMedian,fill=Emissions),size=6,pch=21,colour="black")+
>   scale_fill_manual(values=EmissionsCol)
> p1
>
> #with numbers instead of model names
> Labels<-as.numeric(factor(Dat$model))
>  p2<-
> ggplot()+geom_point(Dat,mapping=aes(x=Temp,y=Precp,colour=Emissions),size=.1)+
>  scale_colour_manual(values=c("#EEB422BE","#FF0000BE"),guide="none")+
>   annotate("text", label=Labels, x=Dat$Temp,
> y=Dat$Precp,colour=c("#EEB422BE","#FF0000BE")[Dat$Emissions])+
>   guides(fill=guide_legend(reverse=TRUE))+theme(axis.title =
> element_text(size = 2)) +
>
> geom_segment(data=Quants,mapping=aes(x=Tmin,y=PMedian,xend=Tmax,yend=PMedian),size=2,colour="black")+
>
> geom_segment(data=Quants,mapping=aes(x=TMedian,y=Pmin,xend=TMedian,yend=Pmax),size=2,colour="black")+
>
> geom_segment(data=Quants,mapping=aes(x=Tmin,y=PMedian,xend=Tmax,yend=PMedian,colour=Emissions),size=1)+
>
> geom_segment(data=Quants,mapping=aes(x=TMedian,y=Pmin,xend=TMedian,yend=Pmax,colour=Emissions),size=1)+
>
> geom_point(data=Quants,mapping=aes(x=TMedian,y=PMedian,fill=Emissions),size=6,pch=21,colour="black")+
>   scale_fill_manual(values=EmissionsCol)
>
> p2
>
>
>
>
>
> --
> View this message in context: http://r.789695.n4.nabble.com/ggplot2-scale-shape-manual-with-large-numbers-instead-of-shapes-tp4711580.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.



-- 
http://had.co.nz/



More information about the R-help mailing list