在一张图表上绘制3个变量-ggplot

时间:2020-01-22 04:55:17

标签: r ggplot2

我有一些关于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在多个列之间绘制数据。我想念什么?

2 个答案:

答案 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_thetaVrugt_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()

您将获得以下带有图例的图: enter image description here

数据示例

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))