【R】調整ggplot圖例大小

圖例太多時,會擠壓正圖,顯得正圖展現區域很小,這時有必要縮小圖例。ide

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