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

zpgglvta  于 2023-04-18  发布在  其他
关注(0)|答案(2)|浏览(185)

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

nnsrf1az

nnsrf1az1#

您可以先汇总数据,然后绘制汇总后的数据,也可以使用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")

就我个人而言,我使用这两种方法(这里显示的或之前总结的),这取决于情况。
作为最后一点,你对每条线的着色方案都是连续的,但是在你的例子中,数据确实应该被分割。我会通过引用as.factor(year(t))factor(year(t))而不是year(t)来强制ggplot2将你的线视为一个因子。

dluptydi

dluptydi2#

首先计算每年的平均水排放量,然后突出显示要点。这是一个示例代码,我会与......进行相应的修改。

library(ggplot2)
library(gghighlight)

sy2.1_avg <- sy2.1 %>%
  group_by(year(t)) %>%
  summarize(avg_discharge = mean(WaterDis))

sy2.1 %>%
  ggplot(aes(x = 1:n()/n()*100, y = 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() +
  gghighlight(sy2.1_avg, label_key = "Average", label_params = list(color = "red"))

在这里,用红色标签突出显示与平均流量相对应的点或线。sy2.1_avg就是年平均水量。

相关问题