突出显示 R 中多面 ggplot2 图中的最小点和最大点
Highlight minimum and maximum points in faceted ggplot2 graph in R
我在 R 中使用内置的 economics
(来自 ggplot2
包)数据集,并使用以下代码为同一图中的每个变量绘制时间序列:
library(reshape2)
library(ggplot2)
me <- melt(economics, id = c("date"))
ggplot(data = me) +
geom_line(aes(x = date, y = value)) +
facet_wrap(~variable, ncol = 1, scales = 'free_y')
现在,我想进一步细化我的图表,对于每个系列,我想为最小值和最大值显示一个红点。
所以我想如果我能找到每个时间序列的最小值和最大值的坐标,我就能找到一种方法在每个时间序列的开始和结束处绘制一个红点。为此,我使用了以下代码:
which(pce == min(economics$pce), arr.ind = TRUE)
which(pca == max(pca), arr.ind = TRUE)
这并没有真正引导我到任何地方。
谢谢:)
方法 1:使用联接
当您想保存过滤后的子集时,这会很好
library(reshape2)
library(ggplot2)
library(dplyr)
me <- melt(economics, id=c("date"))
me %>%
group_by(variable) %>%
summarise(min = min(value),
max = max(value)) -> me.2
left_join(me, me.2) %>%
mutate(color = value == min | value == max) %>%
filter(color == TRUE) -> me.3
ggplot(data=me, aes(x = date, y = value)) +
geom_line() +
geom_point(data=me.3, aes(x = date, y = value), color = "red") +
facet_wrap(~variable, ncol=1, scales='free_y')
方法 2:无连接简化
感谢@Gregor
me.2 <- me %>%
group_by(variable) %>%
mutate(color = (min(value) == value | max(value) == value))
ggplot(data=me.2, aes(x = date, y = value)) +
geom_line() +
geom_point(aes(color = color)) +
facet_wrap(~variable, ncol=1, scales="free_y") +
scale_color_manual(values = c(NA, "red"))
我在 R 中使用内置的 economics
(来自 ggplot2
包)数据集,并使用以下代码为同一图中的每个变量绘制时间序列:
library(reshape2)
library(ggplot2)
me <- melt(economics, id = c("date"))
ggplot(data = me) +
geom_line(aes(x = date, y = value)) +
facet_wrap(~variable, ncol = 1, scales = 'free_y')
现在,我想进一步细化我的图表,对于每个系列,我想为最小值和最大值显示一个红点。 所以我想如果我能找到每个时间序列的最小值和最大值的坐标,我就能找到一种方法在每个时间序列的开始和结束处绘制一个红点。为此,我使用了以下代码:
which(pce == min(economics$pce), arr.ind = TRUE)
which(pca == max(pca), arr.ind = TRUE)
这并没有真正引导我到任何地方。 谢谢:)
方法 1:使用联接
当您想保存过滤后的子集时,这会很好
library(reshape2)
library(ggplot2)
library(dplyr)
me <- melt(economics, id=c("date"))
me %>%
group_by(variable) %>%
summarise(min = min(value),
max = max(value)) -> me.2
left_join(me, me.2) %>%
mutate(color = value == min | value == max) %>%
filter(color == TRUE) -> me.3
ggplot(data=me, aes(x = date, y = value)) +
geom_line() +
geom_point(data=me.3, aes(x = date, y = value), color = "red") +
facet_wrap(~variable, ncol=1, scales='free_y')
方法 2:无连接简化
感谢@Gregor
me.2 <- me %>%
group_by(variable) %>%
mutate(color = (min(value) == value | max(value) == value))
ggplot(data=me.2, aes(x = date, y = value)) +
geom_line() +
geom_point(aes(color = color)) +
facet_wrap(~variable, ncol=1, scales="free_y") +
scale_color_manual(values = c(NA, "red"))