如何在ggplot2中创建多个混合图例

时间:2015-11-15 01:00:44

标签: r ggplot2

我在inJustDecodeBounds(ChickWeight数据框的修改版)中有以下图:

ggplot2

产生以下结果:

enter image description here

这很好,除了传说。

我希望这个传奇有四对:

饮食1-M(紫色,实线), 饮食1-F(彩色紫色,破损线),

饮食2-M(绿色,实线), 饮食2-F(绿色,破损线), ....

等等。让我们说我想把标签放在2x2块中。 我相信我可以使用

将标签放在2x2块中
require(ggplot2) 
ChickWt <- data.frame(ChickWeight, Sex = rep(c("M", "F"), times = 289))  
p1 <- ggplot(ChickWt, aes(x=Time, y=weight,
colour=Diet, Group = Chick, linetype = Sex)) + geom_line()
p1

但我难以理解的问题是如何为四对饮食 - 性别组合制作传奇。任何建议都会有很大的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用interaction函数生成DietSex的所有组合,然后手动将颜色和线型设置为您希望的每个值,从而获得单个图例饮食 - 性别组合。

require(ggplot2)
require(dplyr)

# Add Sex column
set.seed(104)
ChickWt = ChickWeight %>% group_by(Chick) %>%
  mutate(Sex = sample(c("M","F"),1))

plot.colors = hcl(seq(15,375,length.out=5)[1:4],100,65)

ggplot(ChickWt, aes(x=Time, y=weight, 
                          colour=interaction(Diet,Sex,sep="-"), 
                          linetype = interaction(Diet,Sex,sep="-"), 
                          group=Chick)) + 
  geom_line() +
  scale_colour_manual(values=plot.colors[rep(1:4, 2)], name="Diet-Sex") +
  scale_linetype_manual(values=rep(1:2, each=4), name="Diet-Sex") +
  guides(colour=guide_legend(ncol=2))

enter image description here