我试图在RStudio中使用ggplot2绘制土壤剖面中随深度变化的养分浓度。另外,我想以热图为背景,添加特定深度的土壤不饱和的时间比例(请参见下图)。
营养图的第一版:
通过使用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))
第二营养图:
这适用于营养数据。但是,现在我还想在图表上添加热图,其中的数据包含在不同的数据框中(实际上是数据框列表)。因此,多面图的所有子图中的热图都将不同。
如何基于两个不同数据框中的数据获取facet_grid?
非常感谢!