如何在UpSetR绘图中设置Y轴标题并修改字体样式
解决方案
用UpSetR实现需求
UpSetR并非基于ggplot2的绘图系统,无法直接用ggplot2的ylab()函数修改轴标题,需通过自身参数配置;物种名斜体可通过set.names传入表达式实现:
library(UpSetR) # 构建数据集 mydataframe <- data.frame( Orthogroup = c("OG0000000", "OG0000001", "OG0000002", "OG0000003", "OG0000004", "OG0000005", "OG0000006", "OG0000007", "OG0000008", "OG0000009", "OG0000010", "OG0000011", "OG0000012"), Mdong = c(9,3,7,0,3,0,5,3,8,14,0,4,6), Midriensis = c(6,8,9,0,6,0,5,6,6,4,0,8,9), Mcrassostreae = c(4,7,3,5,11,3,9,6,10,3,0,4,5) ) # 转换为0/1矩阵 mydataframe[mydataframe > 0] <- 1 # 定义斜体的物种名(用expression包裹实现斜体) italic_species <- c(expression(italic(Mdong)), expression(italic(Midriensis)), expression(italic(Mcrassostreae))) # 绘图:指定ylab参数修改Y轴标题,set.names传入斜体名称,保留交集高亮 upset( mydataframe, sets = rev(colnames(mydataframe)[2:ncol(mydataframe)]), keep.order = TRUE, order.by = "freq", set.names = rev(italic_species), # 对应sets的顺序,反转保持一致 ylab = "Number of genes shared", # 直接在这里设置Y轴标题 queries = list( list(query = intersects, params = list("Mdong","Midriensis"), color = "red", active = TRUE) ) )
用ComplexUpset实现(更灵活的ggplot2版本)
如果后续需要更多自定义操作,推荐使用基于ggplot2的ComplexUpset,配置逻辑更直观:
library(ComplexUpset) library(ggplot2) # 数据集和0/1转换同上,直接绘图 upset( mydataframe, colnames(mydataframe)[2:ncol(mydataframe)], keep.order = TRUE, sort_intersections = by_freq, queries = list( upset_query(intersects=c('Mdong','Midriensis'), fill='red') ), # 自定义轴标题和物种名样式 base_annotations = list( 'Intersection size' = geom_bar(aes(fill=intersection)), ylab('Number of genes shared') ), set_name = function(name) { # 对物种名应用斜体 element_text(face='italic') } )
关键说明
- UpSetR中:
ylab是upset()函数的内置参数,不能单独调用ggplot的ylab();物种名斜体通过expression(italic(...))生成表达式,传给set.names。 - ComplexUpset基于ggplot2,所有文本样式可通过
theme或专属参数直接配置,自定义空间更大。
内容的提问来源于stack exchange,提问作者K_081
相关产品推荐
相关产品推荐

