【问题标题】:Highlight minimum and maximum points in faceted ggplot2 graph in R突出显示 R 中多面 ggplot2 图中的最小值和最大值
【发布时间】:2015-03-31 17:50:09
【问题描述】:

我在 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)

这并没有真正把我带到任何地方。 谢谢:)

【问题讨论】:

  • 可能不是您的代码无法运行的原因,但您可以使用which.maxwhich.min 获取最大值和最小值的索引。
  • 另外,在您的最小代码中,它可能应该是economics$pce == min(economics$pce)。可能就是这样。
  • @Molx 我试图找到每个变量的最小值和最大值,并在图表上生成它。因此,一旦我知道变量的最小值(y 轴),我怎样才能找到最小值(x 轴)的日期值

标签: r ggplot2 visualization


【解决方案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"))

【讨论】:

  • 一些简化:me &lt;- group_by(me, variable) %&gt;% mutate(color = (min(value) == value | max(value) == value)) 无需加入。
  • 那么对于情节,你不需要给它额外的数据,只需将你不喜欢的点的颜色设置为NA,就像这样:geom_point(aes(color = color)) + scale_color_manual(values = c(NA, "red"))
  • @Jason 我更多地考虑术语或转换、总结和子集。你能帮我解决这个问题吗?
猜你喜欢
  • 1970-01-01
  • 2022-08-05
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 2021-08-18
  • 2019-07-31
相关资源
最近更新 更多