ggplot2:geom_smooth select 观察连接(相当于 geom_path())
ggplot2: geom_smooth select observations connections (equivalence to geom_path())
我正在使用 ggplot2
创建海洋的垂直剖面。我的原始数据集创建 "spikes" 以制作平滑曲线。我希望使用 geom_smooth()
。我还希望这条线根据观察的顺序(而不是根据 x 轴)前进。当我使用 geom_path()
时,它适用于原始图,但不适用于生成的 geom_smooth()
(见下图)。
melteddf = Storfjorden %>% melt(id.vars = "Depth")
ggplot(melteddf, aes(y = Depth, x = value)) +
facet_wrap(~ variable, nrow = 1, scales = "free_x") +
scale_y_reverse() +
geom_smooth(span = 0.5,se = FALSE) +
geom_path()
因此,有没有一种方法可以确保平滑曲线根据观察顺序而不是 a 轴进行?
我的数据子集:
head(Storfjorden)
Depth Salinity Temperature Fluorescence
1 0.72 34.14 3.738 0.01
2 0.92 34.14 3.738 0.02
3 1.10 34.13 3.739 0.03
4 1.80 34.14 3.740 0.06
5 2.80 34.13 3.739 0.02
6 3.43 34.14 3.739 0.05
您提供的数据很少,但我们可以让它发挥作用。
使用一些 tidyverse 包,我们可以为每个 variables
.
安装单独的 loess 函数
我们所做的,本质上是
- 我们的数据按
variable
(group_by
) 分组。
- 使用
do
为每个组拟合黄土函数。
- 使用
augment
从该黄土模型创建预测,在本例中为数据范围内的 1000 个值(对于 variable
)。
.
# Load the packages
library(dplyr)
library(broom)
lo <- melteddf %>%
group_by(variable) %>%
do(augment(
loess(value ~ Depth, data = .),
newdata = data.frame(Depth = seq(min(.$Depth), max(.$Depth), l = 1000))
))
现在我们可以在新的 geom_path
调用中使用该预测数据:
ggplot(melteddf, aes(y = Depth, x = value)) +
facet_wrap(~ variable, nrow = 1, scales = "free_x") +
scale_y_reverse() +
geom_path(aes(col = 'raw')) +
geom_path(data = lo, aes(x = .fitted, col = 'loess'))
(我将简单的字符向量映射到两条线的颜色以创建图例。)
结果:
我正在使用 ggplot2
创建海洋的垂直剖面。我的原始数据集创建 "spikes" 以制作平滑曲线。我希望使用 geom_smooth()
。我还希望这条线根据观察的顺序(而不是根据 x 轴)前进。当我使用 geom_path()
时,它适用于原始图,但不适用于生成的 geom_smooth()
(见下图)。
melteddf = Storfjorden %>% melt(id.vars = "Depth")
ggplot(melteddf, aes(y = Depth, x = value)) +
facet_wrap(~ variable, nrow = 1, scales = "free_x") +
scale_y_reverse() +
geom_smooth(span = 0.5,se = FALSE) +
geom_path()
我的数据子集:
head(Storfjorden)
Depth Salinity Temperature Fluorescence
1 0.72 34.14 3.738 0.01
2 0.92 34.14 3.738 0.02
3 1.10 34.13 3.739 0.03
4 1.80 34.14 3.740 0.06
5 2.80 34.13 3.739 0.02
6 3.43 34.14 3.739 0.05
您提供的数据很少,但我们可以让它发挥作用。
使用一些 tidyverse 包,我们可以为每个 variables
.
我们所做的,本质上是
- 我们的数据按
variable
(group_by
) 分组。 - 使用
do
为每个组拟合黄土函数。 - 使用
augment
从该黄土模型创建预测,在本例中为数据范围内的 1000 个值(对于variable
)。
.
# Load the packages
library(dplyr)
library(broom)
lo <- melteddf %>%
group_by(variable) %>%
do(augment(
loess(value ~ Depth, data = .),
newdata = data.frame(Depth = seq(min(.$Depth), max(.$Depth), l = 1000))
))
现在我们可以在新的 geom_path
调用中使用该预测数据:
ggplot(melteddf, aes(y = Depth, x = value)) +
facet_wrap(~ variable, nrow = 1, scales = "free_x") +
scale_y_reverse() +
geom_path(aes(col = 'raw')) +
geom_path(data = lo, aes(x = .fitted, col = 'loess'))
(我将简单的字符向量映射到两条线的颜色以创建图例。)