0

我使用下面的代码将 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()

在此处输入图像描述

4

1 回答 1

2

您可以先从数据中汇总,然后绘制汇总数据,也可以直接在绘图代码中使用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).

于 2022-01-25T14:32:10.537 回答