繁体   English   中英

如何在R中的多面图中标注最大值点?

[英]How to label max value points in a faceted plot in R?

我读到有人有类似的问题( 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)

带有随机点的多面图

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

我还尝试了+ geom_label(data=.[.$y==max(.$y),], aes(label=y))在我想到的地方. 应该是管道运算符左侧参数占位符,但以这种方式无法正常工作。

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

您可以通过过滤原始数据集并将其作为“ data”参数传递到文本geom来实现。 看起来有些奇怪(您必须使用“。”运算符来引用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)

在此处输入图片说明

如果您不希望在ggplot中使用管道,则可以如下修改上述代码:

set.seed(1222)
data.frame(x=rnorm(100),y=rnorm(100),z=rep(c("A","B"))) %>% 
group_by(z) %>% 
mutate(labelthis = ifelse(y==max(y), format(y, digits = 2, scientific = T), NA)) %>%
    ggplot(aes(x,y)) + 
    geom_point() + 
    ggrepel::geom_label_repel(aes(label = labelthis), min.segment.length = 0) +
    facet_wrap(~z)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM