使用 ggplot2 在 R 中的 y 轴上绘制具有深度(或高程)的垂直剖面的问题
Issues plotting vertical profiles with depth (or elevation) on the y axis in R using ggplot2
我在湖泊实地调查期间收集了温度和溶解氧 (DO) 垂直剖面(从水面到底部)。我正在尝试做一些数据 exploration/viz 来弄清楚如何使用我的数据。我正在尝试按日期在同一个图中绘制我的所有站点,每个调查日期一个温度图(Temp_C)和一个溶解氧图(ODO_mgL)。我有两个“丝束”,一个是 S(开始),一个是 E(结束),我现在只想绘制“S”丝束。
我在绘制这些时遇到问题,有时结果很奇怪。我认为这是因为数据是每秒收集的,所以可能点太多了。有没有办法可以更简洁地绘制它?我可以接受每米取平均值,每米而不是每秒读取一个温度和一个溶解氧(即 1 米(平均)、2 米、3 米、4 米、5 米等处的 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"))
#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"))
在此处访问数据: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"))
给出:
使用样条曲线进行平滑处理可以使趋势更加清晰。我将观察结果的绘图保留为点,但将它们设为半透明 (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)
最后我对 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)
我在湖泊实地调查期间收集了温度和溶解氧 (DO) 垂直剖面(从水面到底部)。我正在尝试做一些数据 exploration/viz 来弄清楚如何使用我的数据。我正在尝试按日期在同一个图中绘制我的所有站点,每个调查日期一个温度图(Temp_C)和一个溶解氧图(ODO_mgL)。我有两个“丝束”,一个是 S(开始),一个是 E(结束),我现在只想绘制“S”丝束。
我在绘制这些时遇到问题,有时结果很奇怪。我认为这是因为数据是每秒收集的,所以可能点太多了。有没有办法可以更简洁地绘制它?我可以接受每米取平均值,每米而不是每秒读取一个温度和一个溶解氧(即 1 米(平均)、2 米、3 米、4 米、5 米等处的 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"))
#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"))
在此处访问数据: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"))
给出:
使用样条曲线进行平滑处理可以使趋势更加清晰。我将观察结果的绘图保留为点,但将它们设为半透明 (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)
最后我对 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)