如何在R中的分面图中标记最大值点?

LC-*_*ist 4 plot label r ggplot2

我读到有人有一个类似的问题(ggplot2 和 facet_grid :为每个图添加最高值)但我仍然无法解决我的问题。

以这个为例:

data.frame(x=rnorm(100),y=rnorm(100),z=rep(c("A","B"))) %>% ggplot(aes(x,y)) + geom_point() + facet_wrap(~z)
Run Code Online (Sandbox Code Playgroud)

带有随机点的分面图

我只想标记每个图中的最大 y 值点。我想使用,+ geom_label_repel(aes(label=y))但我最终标记了所有点。

我还尝试了+ geom_label(data=.[.$y==max(.$y),], aes(label=y))我认为.应该是管道运算符左侧参数占位符的地方,但这样做是行不通的。

奇怪的注意事项:我也想在不将数据框分配给全局环境中的变量的情况下执行此操作,因此我使用了管道运算符。我们可以在不分配任何变量的情况下做到这一点吗?

jdo*_*res 5

您可以通过过滤原始数据集并将其作为“数据”参数传递给文本几何体来实现。看起来有点奇怪(而且你必须使用“.”运算符来引用 dplyr 链的数据集,我个人不喜欢它),但它确实有效,而且你不必从外部引用数据。

set.seed(1222)

data.frame(x=rnorm(100),y=rnorm(100),z=rep(c("A","B"))) %>% 
  ggplot(aes(x,y)) + geom_point() + 
  geom_label(data = . %>% group_by(z) %>% filter(y == max(y)), aes(label = sprintf('%0.2f', y)), hjust = -0.5) +
  facet_wrap(~z)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明