ggplot如何在同一面板(facet-grid)中组合线图和区域图?

4

我正在尝试创建一个面板网格。它将有三行四列。我想要两行是线图,一行是堆叠的geom_area. 但当我绘制时,它总是变成四个行-两个线,两个区域。我希望这两个区域相互叠加。我该如何解决?

enter image description here

library(ggplot2)
rawdata_Fig1 <- read.table(text="
Date    Number  mMP Day Rep Parameter   FeType  Value
13/03/2016  1   0   2   1   pH  NA  3.11
13/03/2016  2   0   2   2   pH  NA  3.13
13/03/2016  3   0   2   3   pH  NA  3.43
13/03/2016  4   0   2   4   pH  NA  3.49
21/04/2016  0   10  41  1   pH  NA  2.87
21/04/2016  0   10  41  2   pH  NA  2.87
21/04/2016  0   10  41  3   pH  NA  2.87
21/04/2016  0   10  41  4   pH  NA  2.85
13/03/2016  1   0   2   1   Fe2 Fe2 0.965538462
13/03/2016  57  1   2   1   Fe2 Fe2 0.217846154
13/03/2016  113 5   2   1   Fe2 Fe2 0.300153846
13/03/2016  169 10  2   1   Fe2 Fe2 0.226307692
21/04/2016  0   0   41  1   Fe2 Fe2 9.277692308
21/04/2016  0   1   41  1   Fe2 Fe2 13.92
21/04/2016  0   5   41  1   Fe2 Fe2 4.181538462
21/04/2016  0   10  41  1   Fe2 Fe2 1.066153846
13/03/2016  1   0   2   1   'PO4 uM'    NA  9.39
13/03/2016  2   0   2   2   'PO4 uM'    NA  0.39
13/03/2016  3   0   2   3   'PO4 uM'    NA  -0.06
13/03/2016  4   0   2   4   'PO4 uM'    NA  -0.06
13/03/2016  57  1   2   1   'PO4 uM'    NA  0.09
13/03/2016  58  1   2   2   'PO4 uM'    NA  -0.06
13/03/2016  59  1   2   3   'PO4 uM'    NA  0.54
13/03/2016  60  1   2   4   'PO4 uM'    NA  0.69
13/03/2016  113 5   2   1   'PO4 uM'    NA  113.19
13/03/2016  114 5   2   2   'PO4 uM'    NA  120.54
13/03/2016  115 5   2   3   'PO4 uM'    NA  144.24
13/03/2016  116 5   2   4   'PO4 uM'    NA  101.34
13/03/2016  169 10  2   1   'PO4 uM'    NA  235.17
13/03/2016  170 10  2   2   'PO4 uM'    NA  263.52
13/03/2016  171 10  2   3   'PO4 uM'    NA  252.72
13/03/2016  172 10  2   4   'PO4 uM'    NA  261.72
21/04/2016  0   10  41  1   'PO4 uM'    NA  17.04
21/04/2016  0   10  41  2   'PO4 uM'    NA  26.79
21/04/2016  0   10  41  3   'PO4 uM'    NA  29.49
21/04/2016  0   10  41  4   'PO4 uM'    NA  23.64
13/03/2016  1   0   2   1   TotFe   TotFe   1.316027906
13/03/2016  57  1   2   1   TotFe   TotFe   0.233872429
13/03/2016  113 5   2   1   TotFe   TotFe   0.273511824
13/03/2016  169 10  2   1   TotFe   TotFe   0.158557579
21/04/2016  0   0   41  1   TotFe   TotFe   12.51812087
21/04/2016  0   1   41  1   TotFe   TotFe   18.02799674
21/04/2016  0   5   41  1   TotFe   TotFe   6.167889825
21/04/2016  0   10  41  1   TotFe   TotFe   1.625215185
",header=TRUE)

rawdata_Fig1_Fe <- read.table(text="
Date    Number  mMP Day Rep Parameter Value
13/03/2016  1   0   2   1   Fe2     0.965538462
13/03/2016  57  1   2   1   Fe2     0.217846154
13/03/2016  113 5   2   1   Fe2     0.300153846
13/03/2016  169 10  2   1   Fe2     0.226307692
21/04/2016  0   0   41  1   Fe2     9.277692308
21/04/2016  0   1   41  1   Fe2     13.92
21/04/2016  0   5   41  1   Fe2     4.181538462
21/04/2016  0   10  41  1   Fe2     1.066153846
13/03/2016  1   0   2   1   TotFe       1.316027906
13/03/2016  57  1   2   1   TotFe       0.233872429
13/03/2016  113 5   2   1   TotFe       0.273511824
13/03/2016  169 10  2   1   TotFe       0.158557579
21/04/2016  0   0   41  1   TotFe       12.51812087
21/04/2016  0   1   41  1   TotFe       18.02799674
21/04/2016  0   5   41  1   TotFe       6.167889825
21/04/2016  0   10  41  1   TotFe       1.625215185
",header=TRUE)

Fig1 <-ggplot(rawdata_Fig1,aes(x=Day,y=Value, group=Rep))
Fig1Pan=Fig1 + theme_bw()

Fig1panel=Fig1Pan + facet_grid(Parameter ~ mMP, scales="free") +
  geom_line(data=subset(rawdata_Fig1, Parameter == "pH")) +
  geom_line(data=subset(rawdata_Fig1, Parameter == "PO4 uM")) +
  geom_area(data=rawdata_Fig1_Fe, aes(y=pH, x=Day, fill=Parameter, stat='identity'))

Fig1panel

你有8个列和9个列标签,是否多了一个或者有一个是两个单词? - rawr
有一个多余的,现在已修复。谢谢。 - Valerie S
所以您想将这两个区域图合并成一个图,基本上是堆叠它们?而不仅仅是重新排序行,使得这两个区域行位于彼此之上? - rawr
正确的做法是堆叠区域图。当不涉及 facet_grid 时,我可以单独完成这项任务。但是在结合 facet 和 stacking 时就不行了。我尝试过 position="stack",但可能没有放在正确的位置上?我对 ggplot 还比较陌生。 - Valerie S
1个回答

3
您可以将这两个分面行组合起来,创建新的fillgroup变量以匹配分面图层。
rawdata_Fig1$Parameter[rawdata_Fig1$Parameter %in% 'Fe2'] <- 'TotFe'
# rawdata_Fig1 <- droplevels(rawdata_Fig1)
rawdata_Fig1_Fe$Parameter2 <- rawdata_Fig1_Fe$Parameter
rawdata_Fig1_Fe$Parameter[rawdata_Fig1_Fe$Parameter %in% 'Fe2'] <- 'TotFe'

Fig1 <-ggplot(rawdata_Fig1,aes(x=Day,y=Value, group=Rep))
Fig1Pan=Fig1 + theme_bw()

Fig1Pan + facet_grid(Parameter ~ mMP, scales="free") +
  geom_line(data=subset(rawdata_Fig1, Parameter == "pH")) +
  geom_line(data=subset(rawdata_Fig1, Parameter == "'PO4 uM'")) +

  ## I only changed these lines
  geom_area(data=rawdata_Fig1_Fe, aes(y=Value, x=Day, group = Parameter2, fill = Parameter2)) +
  labs(fill = 'Parameter')

enter image description here


1
谢谢!我自己经历了一些研究(理解你做的事情,代码没问题),但它能用! - Valerie S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接