将两个图例添加到绘图中

时间:2020-09-05 01:01:49

标签: r ggplot2 ggnewscale

我有一个图,我已经计算了两个样本在一段时间内的基因数量。我想在瀑布图中绘制两组数字。我可以获取图表,但很难显示两个图例。我有以下表格:

current month calender

我正在使用以下代码进行绘制:

    genotype   time degs
1         S  1 dpi   91
2         S  7 dpi  121
3         S 14 dpi  102
4         S 22 dpi  349
9         R  1 dpi  186
10        R  7 dpi  220
11        R 14 dpi  236
12        R 22 dpi  404

    genotype   time degs
5         S  1 dpi  -99
6         S  7 dpi -120
7         S 14 dpi -157
8         S 22 dpi -860
13        R  1 dpi -121
14        R  7 dpi -122
15        R 14 dpi -161
16        R 22 dpi -288

deg.dn$degs=deg.dn$degs*-1 deg.up$time=as.character(deg.up$time) deg.dn$time=as.character(deg.dn$time) deg.up$time = factor(deg.up$time, levels=unique(deg.up$time)) deg.dn$time = factor(deg.dn$time, levels=unique(deg.dn$time)) deg.up$genotype=as.character(deg.up$genotype) deg.dn$genotype=as.character(deg.dn$genotype) deg.dn$genotype = factor(deg.dn$genotype, levels=unique(deg.dn$genotype)) deg.up$genotype = factor(deg.up$genotype, levels=unique(deg.up$genotype)) breaksup = levels(deg.up$time) breaksdn = levels(deg.dn$time) brewup = c("#FEE5D9", "#FCAE91", "#FB6A4A", "#CB181D") brewdn = c("#EFF3FF", "#BDD7E7", "#6BAED6", "#2171B5") ggplot() + geom_bar(data = deg.up, aes(x=genotype, y=degs, fill=time), stat="identity", position="dodge") + scale_fill_manual(values=brewup, breaks=breaksup) + new_scale_fill() + geom_bar(data = deg.dn, aes(x=genotype, y=degs, fill=time), stat="identity", position="dodge") + scale_fill_manual(values=brewdn, breaks=breaksdn) breaksup是数据帧中作为唯一字符的时间列。

在最后的情节中,谁能帮助我使两个传说彼此相邻?谢谢。

Plot I Constructed

1 个答案:

答案 0 :(得分:0)

有两种方式将图例彼此相邻。

第一个只是添加第一个图例并水平排列它们。要同时包含两个图例,请在scale_fill_manual中指定每个图例的标题。如果两个图例都具有相同的标题,则可能会破坏图例的顺序。至少使图例彼此相邻,将legend.box中的theme设置为水平。


ggplot() +
  geom_bar(data = deg.up, aes(x=genotype, y=degs, fill=time), stat="identity", position="dodge") +
  scale_fill_manual(values=brewup, 
                    breaks=breaksup, 
                    name = "time",
                    guide = guide_legend(order = 1)) +
  new_scale_fill() +
  geom_bar(data = deg.dn, aes(x=genotype, y=degs, fill=time), stat="identity", position="dodge") +
  scale_fill_manual(values=brewdn, 
                    breaks=breaksdn, 
                    name ="time", 
                    guide = guide_legend(order = 2)) +
  theme(legend.box = "horizontal")

enter image description here

第二种方法更具实验性。在您的示例中,您的时间图例具有相同的因子(1,7,14,22),因此您可以将这些图例组合在一起。我通过删除第一个图例标签,第二个图例标题并更改了theme中的边距来实现了这一目标。

ggplot() +
  geom_bar(data = deg.up, aes(x=genotype, y=degs, fill=time), stat="identity", position="dodge") +
  scale_fill_manual(values=brewup, breaks=breaksup, 
                    guide = guide_legend(label = FALSE, 
                                         title = "time", 
                                         order = 1)) +
  new_scale_fill() +
  geom_bar(data = deg.dn, aes(x=genotype, y=degs, fill=time), stat="identity", position="dodge") +
  scale_fill_manual(values=brewdn, 
                    breaks=breaksdn, 
                    guide = guide_legend(title = "",
                    order = 2)) +
  theme(legend.box =  "horizontal",
        legend.margin = margin(0,0,0,-.6, "cm"),
        legend.box.margin =  margin(0,1,0,1, "cm"))

enter image description here