【问题标题】:Plotting all subgroups - venn diagram绘制所有子组 - 维恩图
【发布时间】:2015-06-27 17:45:48
【问题描述】:

我最近一直在处理 R 并且遇到了一个有趣的问题。我必须绘制 9 个单列数据集的所有可能的维恩图(让我们将它们命名为 df1...df9)。我正在使用库(gplots),带有示例输入的venn 的代码是:

venn(list(df1,df2,df3,df4))

问题是:如何生成这九个数据集的所有可能子集(总共有 126 个 - 计算使用的梳子函数。),并将它们导出到一个列表中,该列表可以输入到 venn.例如: (df1,df2), (df5,df4), (df3,df5,df8) . . . 在这里,我将遍历所有选项并为每个选项绘制维恩图。 感谢您的任何提示。

【问题讨论】:

  • 你确实意识到这会给你 512 个维恩图,对吧?你确定那是你想要的吗?另外,我不知道任何支持超过 5 套的实现。我记得回答过一个相关问题here
  • 是的,我的目的不是把它们都画出来,只是为了了解方法。提供的答案非常完美。

标签: r statistics combinations


【解决方案1】:

让我们从一个可重现的例子开始:

# Sample data (9 15-element subsets of the letters stored in a list)
set.seed(144)
(dfs <- replicate(9, sample(letters, 15), simplify=FALSE))
# [[1]]
#  [1] "b" "r" "y" "l" "g" "n" "a" "u" "z" "s" "j" "c" "h" "x" "m"
# 
# [[2]]
#  [1] "b" "n" "m" "t" "i" "f" "a" "l" "k" "u" "o" "c" "g" "v" "p"
# ...

venn 函数不支持超过 5 组的维恩图,一组维恩图非常无趣。因此,我将限制为具有 2 到 5 个集合的子集:

# Get all subsets with 2-5 elements
subs <- do.call(expand.grid, replicate(length(dfs), c(F, T), simplify=F))
subs <- subs[rowSums(subs) %in% 2:5,]
venns <- apply(subs, 1, function(x) venn(dfs[x], show.plot=F))

venns 现在包含所有 372 个维恩图对象。您可以使用例如plot(venns[[100]])

绘制一个特定的

如果你真的想绘制所有的维恩图,你可以这样做:

apply(subs, 1, function(x) {
  png(paste0("venn_", paste(which(x), collapse="_"), ".png"))
  venn(dfs[x])
  dev.off()
})

这将创建 372 个包含维恩图的图像文件,根据包含的集合命名。

【讨论】:

  • 这很好,当然我不需要全部,但知道怎么做是关键,这太棒了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多