【R】调整ggplot图例大小

图例太多时,会挤压正图,显得正图展示区域很小,这时有必要缩小图例。


#################
# 减小ggplot图例
#################

library(ggplot2)
p <- ggplot(mtcars, 
            aes(drat, mpg, color = factor(gear), shape = factor(vs))) +
  geom_point(size = 2) +
  theme_classic() +
  theme(legend.position = c(0.1, 0.7))
p

# Overwrite given size (2) to 0.5 (super small)
p <- p + guides(shape = guide_legend(override.aes = list(size = 0.5)))
p

p <- p + guides(color = guide_legend(override.aes = list(size = 0.5)))
p

p <- p + theme(legend.title = element_text(size = 3), 
               legend.text = element_text(size = 3))
p

addSmallLegend <- function(myPlot, pointSize = 0.5, textSize = 3, spaceLegend = 0.1) {
  myPlot +
    guides(shape = guide_legend(override.aes = list(size = pointSize)),
           color = guide_legend(override.aes = list(size = pointSize))) +
    theme(legend.title = element_text(size = textSize), 
          legend.text  = element_text(size = textSize),
          legend.key.size = unit(spaceLegend, "lines"))
}

# Apply on original plot
addSmallLegend(p)


##################
# 折叠图例文本
##################

a <- (1:10)
b <- c(1,1.5,2,4,5,5.3,7,9,9.5,9.8)
places = c("Birmingham","Chester-le-street","Cambridge", "Newcastle-upon-Tyne","Peterborough","Cambridge", "Newcastle-upon-Tyne","Peterborough","Liverpool","Stratford-upon-Avon")
df1 = data.frame(a,b,places)

library(ggplot2)
p <- ggplot(df1, aes(x=a, y=b)) + geom_point(aes(colour = places), size=3)
p

#指定图例列数
library(scales)
p + guides(colour = guide_legend(nrow = 2))
p


##或换行
df1$places<-sub("-", "- \n ", df1$places)  
p = ggplot(df1, aes(x=a, y=b)) + geom_point(aes(colour = places), size=3)
p

posted @ 2019-09-03 17:50  生物信息与育种  阅读(16927)  评论(0编辑  收藏  举报