我使用下面的代码将 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()
您可以先从您的数据进行汇总,然后绘制汇总数据,或者您可以使用
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)
来将您的台词视为一个因素。
谢谢你的回答。但是,就我而言,我根据某个变量(离散)对数据进行了分组。因此,当我执行 stat_summary() 时,它会分别为每个组提供一条平均线。 有没有办法避免这种情况?