我有一些关于R的经验,但是正在尝试学习tidyverse和ggplot。我有一个包含4列数据的数据框。我想要一个简单的x-y图,其中数据的第一列在x轴上,而其他3列中的数据在y轴上绘制,从而在一个图上显示3条线。我的数据的前15行如下所示(对图片感到抱歉-我不知道如何插入我的数据样本):
screen shot - first 15 rows of data
我试图按以下方式绘制数据的第二和第三列:
ggplot(data=SWRC_SL, aes(x=SWRC_SL$pressure_head, y=SWRC_SL$UNSODA_theta)) +
geom_line(colour="red") + scale_x_log10() +
ggplot(data=SWRC_SL, aes(x=SWRC_SL$pressure_head, y=SWRC_SL$Vrugt_theta)) +
geom_line(colour="blue") + scale_x_log10()
我收到此错误:
错误:不知道如何将ggplot(data = SWRC_SL,aes(x = SWRC_SL $ pressure_head,y = SWRC_SL $ Vrugt_theta))添加到图
我相信我应该使用类似“ group =”的东西来指示应该绘制哪些列,但是我还没有找到一个示例来说明如何使用gglot在多个列之间绘制数据。我想念什么?
答案 0 :(得分:2)
ggplot()
仅被调用一次。请尝试以下操作:
ggplot() +
geom_line(data=SWRC_SL, aes(x=pressure_head, y=UNSODA_theta), colour="red") +
geom_line(data=SWRC_SL, aes(x=pressure_head, y=Vrugt_theta), colour="blue") +
scale_x_log10()
更好的方法是将数据变长,其中UNSODA_theta
和Vrugt_theta
数据位于同一列(例如thetas
)中,而又有另一列(例如{ {1}})指示数据是用于type_theta
还是UNSODA_theta
。然后您可以执行以下操作:
Vrugt_theta
这是更理想的选择,因为ggplot2将包含一个图例,该图例指示将颜色应用到哪种色系。
答案 1 :(得分:2)
如@Marius所建议,绘制数据的最有效方法是将它们转换为长格式。
使用tidyverse
,您可以使用pivot_longer
函数(来自tidyr
包)并编写以下代码:
library(tidyverse)
SWRC_SL %>% pivot_longer(.,-pressure_head, names_to = "variable", values_to = "value") %>%
ggplot(aes(x = pressure_head, y = value, color = variable))+
geom_line()+
scale_x_log10()
编辑:说明示例
使用此虚拟数据集:
pressure UNSODA_theta Vrugt_theta Cassel_theta
1 0 -1.4672500 1.4119747 -2.0553118
2 1 0.5210227 0.6189239 1.4817574
3 2 -0.1587546 1.4094018 2.2796175
4 3 1.4645873 2.6888733 -0.4631109
5 4 -0.7660820 2.5865884 -1.8799346
6 5 -0.4302118 0.6690922 0.9633620
首先,将数据转换为长格式:
df %>% pivot_longer(.,-pressure, names_to = "variable", values_to = "value")
# A tibble: 45 x 3
pressure variable value
<int> <chr> <dbl>
1 0 UNSODA_theta -1.47
2 0 Vrugt_theta 1.41
3 0 Cassel_theta -2.06
4 1 UNSODA_theta 0.521
5 1 Vrugt_theta 0.619
6 1 Cassel_theta 1.48
7 2 UNSODA_theta -0.159
8 2 Vrugt_theta 1.41
9 2 Cassel_theta 2.28
10 3 UNSODA_theta 1.46
# … with 35 more rows
现在,您的数据适合使用ggplot2
进行绘制,您可以通过在它们之间添加“管道”(ggplot
)将%>%
命令直接添加到上一个命令中: / p>
library(tidyverse)
df %>% pivot_longer(.,-pressure, names_to = "variable", values_to = "value") %>%
ggplot(aes(x = pressure, y = value, color = variable))+
geom_line()+
scale_x_log10()
数据示例
structure(list(pressure = 0:14, UNSODA_theta = c(-1.46725002909224,
0.521022742648139, -0.158754604716016, 1.4645873119698, -0.766081999604665,
-0.430211753928547, -0.926109497377437, -0.17710396143654, 0.402011779486338,
-0.731748173119606, 0.830373167981674, -1.20808278630446, -1.04798441280774,
1.44115770684428, -1.01584746530465), Vrugt_theta = c(1.41197471231751,
0.61892394889108, 1.40940183965093, 2.68887328620405, 2.58658843344197,
0.669092199317234, -1.28523553529247, 3.49766158983416, 1.66706616676549,
1.5413273359637, 0.986600476854091, 1.51010842295293, 0.835624168230333,
1.42069464325451, 0.599753256022356), Cassel_theta = c(-2.05531181632119,
1.48175740118232, 2.27961753824932, -0.46311085383842, -1.87993463341154,
0.963361958516736, -0.0670637053409687, -2.59982761023726, 0.00319778952040447,
-0.945450500892219, -0.511452869790608, -1.73485854395378, 2.7047128618762,
-0.496698054586832, -2.40827011837962)), class = "data.frame", row.names = c(NA,
-15L))