ggplot facet如何与来自不同数据帧的数据一起使用?

时间:2019-08-12 08:30:25

标签: r ggplot2 facet facet-grid geom-raster

我试图在RStudio中使用ggplot2绘制土壤剖面中随深度变化的养分浓度。另外,我想以热图为背景,添加特定深度的土壤不饱和的时间比例(请参见下图)。

营养图的第一版:

image 1

通过使用geom_path作为营养物浓度和geom_raster作为热图,我成功地在一个位置绘制了该图。

包含营养数据的数据框:

     month transect location   depth   NH4    PO4   NO3
1     feb     LB_A    creek -0.9025 0.047  0.150 3.269
2     feb     LB_A    creek -0.7125    NA     NA    NA
3     feb     LB_A    creek -0.5625 0.113     NA 2.320
4     feb     LB_A    creek -0.4625 0.000  0.140 0.011
5     feb     LB_A    creek -0.3625 0.034     NA 1.547
6     feb     LB_A    creek -0.2625 0.022  0.050 0.259
7     feb     LB_A    creek -0.1875 0.142  0.090 1.623
8     feb     LB_A    creek -0.1325 0.134     NA 2.355
9     feb     LB_A    creek -0.0825 0.050     NA 0.254
10    feb     LB_A    creek -0.0325    NA     NA    NA
11    feb     LB_A interior -0.9025 0.000  0.260 0.195
12    feb     LB_A interior -0.7125 0.044  0.340 3.442
13    feb     LB_A interior -0.5625 0.001  0.400 2.446
14    feb     LB_A interior -0.4625 0.004  0.420 3.529
15    feb     LB_A interior -0.3625 0.020  0.390 4.409
16    feb     LB_A interior -0.2625 0.019  0.380 4.610
17    feb     LB_A interior -0.1875 0.093  0.340 5.009
18    feb     LB_A interior -0.1325 0.161  0.280 5.218
19    feb     LB_A interior -0.0825 0.195  0.250 5.212
20    feb     LB_A interior -0.0325 0.101     NA 4.380
...

包含特定深度下土壤未饱和时间比例的数据框:

   depth      prop
1   -1.00 0.1792537
2   -0.99 0.3376986
3   -0.98 0.4722728
4   -0.97 0.5322105
5   -0.96 0.5560578
6   -0.95 0.5675271
7   -0.94 0.5762188
8   -0.93 0.5823193
9   -0.92 0.5873759
10  -0.91 0.5906894
...

如您所见,这是一个包含两列的数据框:深度和土壤未饱和的相应时间比例。

我创建了一个新的数据框,其中包含在营养素图的整个x轴范围内复制的前一个数据框的数据,以便将用geom_raster绘制的热图分布在营养素数据的整个x轴范围内。 / p>

  d <- dur[[transect]][[location]]
  x<-rep(1:50, each=101)
  y<-rep(d$depth,50)
  z<-rep(d$prop,50)
  grad<-data.frame(cbind(x,y,z))
  graph <- ggplot(grad,aes(x=x,y=y)) +
    geom_raster(aes(x=x,y=y,fill=z),interpolate=T)

结果数据框:

    x     y         z
1   1 -1.00 0.1792537
2   1 -0.99 0.3376986
3   1 -0.98 0.4722728
4   1 -0.97 0.5322105
5   1 -0.96 0.5560578
6   1 -0.95 0.5675271
7   1 -0.94 0.5762188
8   1 -0.93 0.5823193
9   1 -0.92 0.5873759
10  1 -0.91 0.5906894
...
5041 50 -0.09 0.8283148
5042 50 -0.08 0.8343687
5043 50 -0.07 0.8401476
5044 50 -0.06 0.8462621
5045 50 -0.05 0.8525490
5046 50 -0.04 0.8581835
5047 50 -0.03 0.8638086
5048 50 -0.02 0.8698765
5049 50 -0.01 0.8758977
5050 50  0.00 0.8809822

现在,我需要为所有横断面上的所有位置绘制这些图。我发现我可以使用构面来做到这一点。

ggplot(data=md,aes(x=NO3,y=depth)) +
  geom_path(aes(col=L1)) + 
  facet_grid(rows=vars(L3),cols=vars(L2))

第二营养图:

image 2

这适用于营养数据。但是,现在我还想在图表上添加热图,其中的数据包含在不同的数据框中(实际上是数据框列表)。因此,多面图的所有子图中的热图都将不同。

如何基于两个不同数据框中的数据获取facet_grid?

非常感谢!

0 个答案:

没有答案