在ggplot中标记每个组中的极值

如何解决在ggplot中标记每个组中的极值

在geom_violin和geom_point的ggplot组合中,我想标记每个组的极值。但是,这应该严格基于组。 到目前为止,我的解决方案只为我提供了每个组的极值,并在每个组中标记了它们的每个。就像在真实数据中一样,我有10组和3个极端值,这使得该图不可读。

数据

df <- data.frame(group = c('XvsHD','XvsHD','YvsHD','ZvsHD','ZvsHD'),protein = c('A','B','C','D','A','G','F','R'),logFC = c(-1,2,4,5,6,-3,1,2))

extremes <- df %>% group_by(group) %>% slice_max(order_by = logFC,n = 2,preserve = T)%>% pull(protein)

   df %>% 
    ggplot(aes(x= group,y = logFC)) +
    geom_violin() +   
    geom_point() 

    df %>% 
    ggplot(aes(x= group,y = logFC)) +
    geom_violin() +   
    geom_point() +
    geom_label_repel(aes(label= ifelse(protein %in% extremes,as.character(protein),NA),hjust=0,vjust=0))

目标是绘制一个图,其中每个组的两个最极端值都用“蛋白质”标签标记。如果它既适用于极低值又适用于高值/组,那么真的很酷。

非常感谢您!

塞巴斯蒂安

解决方法

您只能创建一个boto3.client值的label列,只要每个组中的protein值是最小值或最大值即可。

logFC

enter image description here


要标记顶部和底部的library(dplyr) library(ggplot2) library(ggrepel) df %>% group_by(group) %>% mutate(label = ifelse(logFC %in% range(logFC),protein,'')) %>% ggplot(aes(x= group,y = logFC,label = label)) + geom_violin() + geom_point() + geom_label_repel(hjust=0,vjust=0) 值,可以使用n函数。

dense_rank
,

与Ronak Shah的解决方案稍有不同,因为它使用rank来找到两个最极端的值(定义为与均值之差)。不一定要同时设置一个极端值高和一个低值:两个极端值可以高也可以低。

df <- df %>% group_by(group) %>% 
  mutate(
    logFC_demean = scale(logFC,scale = FALSE),label = ifelse(rank(-abs(logFC_demean),) <= 2,"")) 


ggplot(df,aes(x= group,vjust=0)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?