r - 使用 ggplot2 在 R 中绘制具有 y 轴深度(或高程)的垂直剖面的问题

标签 r ggplot2 plot temperature

我在湖泊进行实地调查期间收集了温度和溶解氧 (DO) 垂直剖面(从水面到底部)。我正在尝试进行一些数据探索/即找出如何使用我的数据。我试图按日期在同一个图中绘制我的所有站点,每个调查日期一张温度 (Temp_C) 绘图和一张溶解氧 (ODO_mgL) 绘图。我有两个“拖曳”,一个是 S(开始),一个是 E(结束),我现在只是想绘制“S”拖曳。

我在绘制这些时遇到问题,有时结果很奇怪。我认为这是因为每秒收集一次数据,所以可能有太多的点。有没有一种方法可以以更简洁的方式绘制此图?我可以接受每米的平均值,每米而不是每秒读取一个温度和一个溶解氧读数(即 1 m(平均)、2m、3m、4m、5m 等处的 1 个温度/溶解氧读数。 .).

library(tidyverse)
library(ggplot2) 
    
sonde <- read.csv("SondeRaw/sonde_max_depth_no.up_byTow.csv",header=TRUE)
    
CH_720 <- sonde %>% 
filter(Date == '7/20/2021' & Tow == 'S')

#Temperature plot for all CH sites 07/20/2021
#This one looks good

ggplot(CH_720) + aes(x=Temp_C, y=Depth_m, color = Site) +
  geom_line() + scale_y_reverse() + xlim(0,25) +
  labs(title="Temperature", x="Temperature (C)", 
       y="Depth (m)", 
       caption="JUL 20 CH Sites") + 
  theme(plot.title=element_text(hjust=0.5),
        plot.caption = element_text(face = "italic")) 

Temperature plot for all CH sites 07/20/2021 - this one looks good

#Dissolved oxygen plot for all CH sites 07/20/2021
#This one looks weird, particularly for site CH711 near the surface

ggplot(CH_720) + aes(x=ODO_mgL, y=Depth_m, color = Site) +
  geom_line() + scale_y_reverse() + xlim(0,11) +
  labs(title="Dissolved Oxygen", x="DO (mg/L)", 
       y="Depth (m)", 
       caption="JUL 20 CH Sites") + 
  theme(plot.title=element_text(hjust=0.5),
        plot.caption = element_text(face = "italic")) 

Dissolved oxygen plot for all CH sites 07/20/2021 - this one doesnt look good

在此处访问数据:https://github.com/cabanelas/sonde_data 如果您在访问我的数据时遇到问题,请告诉我,我仍在学习如何正确使用 GitHub。刚刚上传此内容,以便您可以访问我正在使用的内容。

感谢任何帮助。我无法在网上找到有关绘制温度和溶解氧剖面的有用资源。

最佳答案

为了探索数据,至少在开始时,我建议使用 geom_point()geom_line() 一起。无论如何,您面临的问题是因为您将自变量映射到 y审美,同时geom_line()期望自变量映射到 x 。在这种情况下,需要通过 orientation = "y"geom_line() 。这是“ggplot2”的一个相当新的功能。 (温度读数的噪音较小,因此它们在图中看起来并不算太糟糕,但无论如何最好也绘制温度,如下所示的 DO、溶解氧。)

ggplot(CH_720) + aes(x=ODO_mgL, y=Depth_m, color = Site) +
  geom_point() + geom_line(orientation = "y") +
  scale_y_reverse() + xlim(0,11) +
  labs(title="Dissolved Oxygen", x="DO (mg/L)",
       y="Depth (m)",
       caption="JUL 20 CH Sites") +
  theme(plot.title=element_text(hjust=0.5),
        plot.caption = element_text(face = "italic"))

给予:

enter image description here

使用样条曲线进行平滑使趋势更加清晰。我将观察结果绘制为点,但使它们半透明( alpha = 0.33 )以突出显示趋势,但不删除任何信息。我禁用了置信带的绘制;您可能想要添加它。在 geom_smooth()当使用method="loess"时您可以使用传递给 span 的值来调整拟合样条线的灵活性。经过反复试验,我选择了 0.3。您可以做出自己的选择。

ggplot(CH_720) + aes(x=ODO_mgL, y=Depth_m, color = Site) +
  geom_point(alpha = 0.33) +
  geom_smooth(orientation = "y", method = "loess", span = 0.3, se = FALSE) +
  scale_y_reverse() +
  xlim(0,11) +
  labs(title="Dissolved Oxygen", x="DO (mg/L)",
       y="Depth (m)",
       caption="JUL 20 CH Sites") +
  theme(plot.title=element_text(hjust=0.5),
        plot.caption = element_text(face = "italic"))

由于趋势线重叠,我为站点制作了一个带有单独面板的版本。 (当数据中存在间隙时,样条线有时会产生意外的弯曲。在某种程度上,可以通过调整 span 来防止这种情况。)

ggplot(CH_720) + aes(x=ODO_mgL, y=Depth_m, color = Site) +
  geom_point(alpha = 0.33) +
  geom_smooth(orientation = "y", method = "loess", span = 0.3, se = FALSE) +
  scale_y_reverse() +
  xlim(0,11) +
  labs(title="Dissolved Oxygen", x="DO (mg/L)",
       y="Depth (m)",
       caption="JUL 20 CH Sites") +
  theme(plot.title=element_text(hjust=0.5),
        plot.caption = element_text(face = "italic")) +
  facet_wrap(~ Site)

enter image description here

最后我使用了对数刻度来表示 DO。这使得模式更清晰一些,但也许它完全不适合您的数据。

ggplot(CH_720) + aes(x=ODO_mgL, y=Depth_m, color = Site) +
  geom_point(alpha = 0.33) +
  geom_smooth(orientation = "y", method = "loess", span = 0.4, se = FALSE) +
  scale_y_reverse() +
  scale_x_log10(limits = c(1, 12)) +
  #  xlim(0,11) +
  labs(title="Dissolved Oxygen", x="DO (mg/L)",
       y="Depth (m)",
       caption="JUL 20 CH Sites") +
  theme(plot.title=element_text(hjust=0.5),
        plot.caption = element_text(face = "italic")) +
  facet_wrap(~ Site)

enter image description here

关于r - 使用 ggplot2 在 R 中绘制具有 y 轴深度(或高程)的垂直剖面的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70978672/

相关文章:

R 从对象列表中获取对象的名称

r - 使用 shinyapps.io 检测语言环境时出错

matlab - 匹配轴刻度

r - 当 DataExplorer::plot_str() 调用时,其他图消失

r - 如何在RMarkdown中嵌入ggvis交互式图表?

r - 在 x 轴上的离散组之间添加刻度

r - 如何在gganimate中显示y轴的当前值?

r - 如何更改 ggplot2 中的默认统计信息

python - Matplotlib:在同一轴位置显示次要刻度和主要刻度

r - 将 pyr 和 cor 与多个数据框列一起使用