ggvenn绘制韦恩图时出现无来源额外共享值问题求助
问题与解决方案
问题描述
使用ggvenn工具结合三列CSV文件生成韦恩图时,出现异常:
- Dro与Xvm组间显示额外的共享计数(标记为“?”)
- Dro和Xvm组各含3个有效元素,且不应存在仅属于二者的共享值,但图中显示两组总共有4个元素,还出现未知共享值
- 已排查CSV无隐藏空格,查看
ggvenn_data发现两组包含若干空字符串;启用show_elements=T仍无法查看未知共享值内容,无法定位问题
相关代码与数据
数据读取与格式转换
# 读取CSV文件 data <- read.table("infile.csv", header = T, sep = ",") # 转换为ggvenn适用格式 ggvenn_data <- list( Dro = data$Dro_v_Con, Foc = data$Foc_v_Con, Xvm = data$Xvm_v_Con )
ggvenn_data输出
$Dro [1] "M830.837T11.111" "M883.492T15.092" "M367.151T397.982" "" [5] "" "" "" "" [9] "" "" $Foc [1] "M883.492T15.092" "M1279.087T13.111" "M830.837T11.111" "M1116.775T17.12" [5] "M1244.755T16.127" "M1030.792T17.119" "M1334.742T13.111" "M1239.758T16.118" [9] "M1472.714T13.108" "M970.807T12.104" $Xvm [1] "M1094.782T12.105" "M991.807T13.109" "M830.837T11.111" "" [5] "" "" "" "" [9] "" ""
韦恩图绘制代码
ggvenn_plot <- ggvenn(ggvenn_data, fill_color = c("#0073C2FF", "#EFC000FF", "#CD534CFF"), stroke_size = 0.5, show_percentage = F, show_elements = F) + theme_void()
可复现数据
list(Dro = c("M830.837T11.111", "M883.492T15.092", "M367.151T397.982", "", "", "", "", "", "", ""), Foc = c("M883.492T15.092", "M1279.087T13.111", "M830.837T11.111", "M1116.775T17.12", "M1244.755T16.127", "M1030.792T17.119", "M1334.742T13.111", "M1239.758T16.118", "M1472.714T13.108", "M970.807T12.104" ), Xvm = c("M1094.782T12.105", "M991.807T13.109", "M830.837T11.111", "", "", "", "", "", "", ""))
解决方案
问题根源
ggvenn会将空字符串""视为有效元素统计,Dro和Xvm组都包含多个空字符串,这些空字符串被判定为两组共有的元素,导致出现额外共享计数。
修复代码
生成ggvenn_data时过滤掉每组的空字符串:
# 转换格式并过滤空字符串 ggvenn_data <- list( Dro = data$Dro_v_Con[data$Dro_v_Con != ""], Foc = data$Foc_v_Con[data$Foc_v_Con != ""], Xvm = data$Xvm_v_Con[data$Xvm_v_Con != ""] )
或用purrr包批量处理:
library(purrr) ggvenn_data <- map(ggvenn_data, ~ .x[.x != ""])
效果验证
处理后重新绘制韦恩图,将得到正确计数:
- Dro组:3个元素
- Xvm组:3个元素
- 二者仅与Foc组共享
M830.837T11.111,无仅属于彼此的共享元素
内容的提问来源于stack exchange,提问作者Jpike
相关产品推荐
相关产品推荐

