如何在ggplot中添加两个(相同的)图例并更改图例标题和标签?

时间:2018-01-07 15:32:43

标签: r ggplot2

我想在ggplot中添加两个(相同的)图例,并且还想更改图例标题和标签。我试过这个:

library(ggplot2)
ggplot(ToothGrowth, aes(x = len, color=factor(dose), fill= factor(dose))) +
  geom_density(alpha=0.4) +
  theme(panel.background = element_rect(fill = "khaki1", colour = "darkorchid3", size = 2, linetype = "solid"),
      panel.grid.major = element_line(size = 0.5, linetype = 'solid', colour = "white"),
      panel.grid.minor = element_line(size = 0.25, linetype = 'solid', colour = "white"),
      plot.background = element_rect(fill = "bisque2"),
      text = element_text(colour="blue4"), axis.title = element_text(size = rel(1.25)), axis.text = element_text(colour="blue4", size = 12),
      legend.position=c(.90,.85), legend.background = 
      element_rect(fill="lightsalmon", colour = "tomato3", size = 1.25),
      legend.title = element_text(colour="navy", face="bold"),
      legend.text = element_text( colour="midnightblue", face="bold"), strip.background = element_rect(fill="olivedrab1", colour = "darkorchid3", size = 2, linetype = "solid"), 
      strip.text = element_text(colour="coral4", size=12,  angle=0, face="bold")) +
   scale_fill_discrete(name = "Dose", labels = c("A", "B", "C")) +
   facet_wrap(~supp)

但我得到了这个情节: enter image description here

我想要这个情节: enter image description here

有人能帮助我吗?谢谢。

1 个答案:

答案 0 :(得分:0)

正如@erocoar和others建议的那样,来自grid.arrange的{​​{1}}在这里很有用。从链接的问题中大量借用:

gridExtra

有些事情需要注意。

  • 我将library(gridExtra) out <- by(data = ToothGrowth, INDICES = ToothGrowth$supp, FUN = function(m) { m <- droplevels(m) m <- ggplot(m, aes(x = len, fill= factor(dose)), color=factor(dose)) + geom_density(alpha=0.4) + theme(panel.background = element_rect(fill = "khaki1", colour = "darkorchid3", size = 2, linetype = "solid"), panel.grid.major = element_line(size = 0.5, linetype = 'solid', colour = "white"), panel.grid.minor = element_line(size = 0.25, linetype = 'solid', colour = "white"), plot.background = element_rect(fill = "bisque2"), text = element_text(colour="blue4"), axis.title = element_text(size = rel(1.25)), axis.text = element_text(colour="blue4", size = 12), legend.position=c(.90,.85), legend.background = element_rect(fill="lightsalmon", colour = "tomato3", size = 1.25), legend.title = element_text(colour="navy", face="bold"), legend.text = element_text( colour="midnightblue", face="bold"), strip.background = element_rect(fill="olivedrab1", colour = "darkorchid3", size = 2, linetype = "solid"), strip.text = element_text(colour="coral4", size=12, angle=0, face="bold")) + scale_fill_discrete(name = "Dose", labels = c("A", "B", "C")) + xlim(0,35) + ylim(0,0.2) + ggtitle(m$supp) }) do.call(grid.arrange, list(grobs = out, ncol = 2)) 参数移到color调用之外,这删除了额外的图例。
  • 我手动设置x和y限制以获得一致的外观。
  • 我需要添加一个标题。
  • 为了得到这些情节,我不得不在aes()添加第二个参数。当提供多个参数时,它需要在列表中。

我希望这会有所帮助。