在 ggplot 中添加平均线的代码?

问题描述 投票:0回答:2

我使用下面的代码将 ggplot 作为图像添加到更下方。该图是一条持续时间曲线,在 y 轴上显示排水量,在 x 轴上显示时间百分比。这些线代表一年的排水量测量,总共有 20 年 = 20 条线。我想使用 gghighlight 突出显示随时间推移的平均排水量。如何添加平均排水量?

sy2.1 %>% 
  group_by(year(t)) %>% 
  arrange(desc(WaterDis)) %>% 
  mutate(t3 = 1:n()/n()*100) %>% 
  ggplot(aes(t3, WaterDis, colour=year(t),
             group=year(t))) +
  geom_line(size=1) +
  scale_y_continuous(expand=c(0, 0)) +
  scale_x_continuous(expand=c(0.001, 0)) +
  labs(x="% of time", y="Water discharge (m3/s)", colour="Year") +
  theme_classic()

r ggplot2 mean gghighlight
2个回答
3
投票

您可以先从您的数据进行汇总,然后绘制汇总数据,或者您可以使用

stat_summary()
直接在您的绘图代码中进行汇总。我将在下面通过示例数据集向您展示后一种方法。

这是数据和基本情节。

library(ggplot2)

set.seed(1234)

df <- data.frame(
  x=rep(1:100, 3),
  y=c(log(1:100)+rnorm(1, 0.02, 1), log(1:100)+rnorm(1, 0.02, 0.01), log(1:100)+rnorm(1, -0.04, 0.01)),
  category=rep(LETTERS[1:3], each=100)
)

p <- ggplot(df, aes(x,y,color=category)) +
  geom_line(size=0.5) +
  theme_classic()
p

要找到线的平均值,您可以使用

stat_summary()
并告诉它使用
mean()
函数。

p + stat_summary(geom="line", fun = "mean", color="black", size=1, linetype="dashed")

就我个人而言,这两种方法(这里显示或之前总结过)都使用,视情况而定。

最后一点,每条线的着色方案都是连续的,但在您的示例中确实应该对数据进行分段。我会强迫

ggplot2
通过引用
as.factor(year(t))
factor(year(t))
而不是
year(t)
来将您的台词视为一个因素。


0
投票

谢谢你的回答。但是,就我而言,我根据某个变量(离散)对数据进行了分组。因此,当我执行 stat_summary() 时,它会分别为每个组提供一条平均线。 有没有办法避免这种情况?

© www.soinside.com 2019 - 2024. All rights reserved.