首先,我想为我的基本问题道歉。 我确信,如果我是一位经验丰富的用户,关于这个主题的其他主题就会令人满意,但即使在阅读之后我也无法管理。 所以,如果这可能会让你烦恼,你可以忽略它。
对于那些仍然想要帮助的人: 我正在尝试创建一个5向维恩图。 我的数据以excel排列为5列(每个代表一个站点A-E),每行代表五个站点中每个站点的物种丰度(0-16)。
我想创建一个类似于此的漂亮的维恩图: https://i.stack.imgur.com/TeRSJ.png
我确信它的问题只需点击几下。 但我不能设法: 以写入方式加载我的数据 - 它应该是哪种格式?数据集?清单?基质
我认为R似乎建议我只能使用在场缺席数据(0/1)是对的吗?
最终我认为我会使用此命令将x作为我的数据
venn(x, snames = c(""), ilabels = FALSE, counts = FALSE, zcolor = c("bw"),
transparency = 0.3, ellipse = FALSE, size = 15, cexil = 0.45, cexsn = 0.85,
...)
有人能告诉我使用什么代码吗? 如果有人告诉我如何在这里做,我也可以上传我的数据集。
提前致谢
答案 0 :(得分:0)
免责声明1:我不确定您的问题是关于如何计算每个子组的计数,或者如何绘制5组维恩图。我假设后者。
免责声明2:我发现5套维恩图非常难以阅读。到了没用的地步。但那是我个人的意见。
如果其他R套餐是一个选项,这里是使用VennDiagram
的一套完整的5套示例(直接来自VennDiagram reference manual)
library(VennDiagram);
venn.plot <- draw.quintuple.venn(
area1 = 301, area2 = 321, area3 = 311, area4 = 321, area5 = 301,
n12 = 188, n13 = 191, n14 = 184, n15 = 177,
n23 = 194, n24 = 197, n25 = 190,
n34 = 190, n35 = 173, n45 = 186,
n123 = 112, n124 = 108, n125 = 108,
n134 = 111, n135 = 104, n145 = 104,
n234 = 111, n235 = 107, n245 = 110,
n345 = 100,
n1234 = 61, n1235 = 60, n1245 = 59,
n1345 = 58, n2345 = 57,
n12345 = 31,
category = c("A", "B", "C", "D", "E"),
fill = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
cat.col = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
cat.cex = 2,
margin = 0.05,
cex = c(
1.5, 1.5, 1.5, 1.5, 1.5, 1, 0.8, 1, 0.8, 1, 0.8, 1, 0.8, 1, 0.8,
1, 0.55, 1, 0.55, 1, 0.55, 1, 0.55, 1, 0.55, 1, 1, 1, 1, 1, 1.5),
ind = TRUE);
png("venn_5set.png");
grid.draw(venn.plot);
dev.off();
您的源表格式为非典型格式。正如我在评论中解释的那样,您通常以二进制矩阵开始(每组一列,每个观察的成员资格由0或1表示),或者设置元素列表。
说实话,我对你实际上要做的事情越来越不确定。我有一种感觉,可能会对维恩图有误解。例如,让我们看一下表格的第一行
# Read data
library(readxl);
data <- as.data.frame(read_excel("~/Downloads/dataset4venn.xlsx"));
rownames(data) <- data[, 1];
data <- data[, -1];
head(data);
# A B C D E
#1 8 8 7 8 10
#2 0 0 10 0 2
#3 0 0 0 0 3
#4 0 0 1 2 0
#5 1 0 1 0 2
#6 0 0 0 0 1
观察结果是存在(由1
编码)或缺席(由0
编码)唯一元素(在您的情况下是一个物种)特定组(即采样点)。你所说的目击数量在这里无关紧要:维恩图探讨了在不同地点采样的不同物种之间的逻辑关系,或者换句话说,哪个独特物种是由网站AE共享。
说完并忽略了每个站点的目击数量,您可以在下面的5组维恩图中显示不同站点之间的重叠。我首先定义辅助函数cts
来计算每组/重叠的计数,然后将这些数字提供给draw.quintuple.venn
。
# Function to calculate the count per group/overlap
# Note: data is a global variable
cts <- function(set) {
df <- data;
for (i in 1:length(set)) df <- subset(df, df[set[i]] >= 1);
nrow(df);
}
# Plot
library(VennDiagram);
venn.plot <- draw.quintuple.venn(
area1 = cts("A"), area2 = cts("B"), area3 = cts("C"),
area4 = cts("D"), area5 = cts("E"),
n12 = cts(c("A", "B")), n13 = cts(c("A", "C")), n14 = cts(c("A", "D")),
n15 = cts(c("A", "E")), n23 = cts(c("B", "C")), n24 = cts(c("B", "D")),
n25 = cts(c("B", "E")), n34 = cts(c("C", "D")), n35 = cts(c("C", "E")),
n45 = cts(c("D", "E")),
n123 = cts(c("A", "B", "C")), n124 = cts(c("A", "B", "D")),
n125 = cts(c("A", "B", "E")), n134 = cts(c("A", "C", "D")),
n135 = cts(c("A", "C", "E")), n145 = cts(c("A", "D", "E")),
n234 = cts(c("B", "C", "D")), n235 = cts(c("B", "C", "E")),
n245 = cts(c("B", "D", "E")), n345 = cts(c("C", "D", "E")),
n1234 = cts(c("A", "B", "C", "D")), n1235 = cts(c("A", "B", "C", "E")),
n1245 = cts(c("A", "B", "D", "E")), n1345 = cts(c("A", "C", "D", "E")),
n2345 = cts(c("B", "C", "D", "E")),
n12345 = cts(c("A", "B", "C", "D", "E")),
category = c("A", "B", "C", "D", "E"),
fill = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
cat.col = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
cat.cex = 2,
margin = 0.05,
cex = c(
1.5, 1.5, 1.5, 1.5, 1.5, 1, 0.8, 1, 0.8, 1, 0.8, 1, 0.8, 1, 0.8,
1, 0.55, 1, 0.55, 1, 0.55, 1, 0.55, 1, 0.55, 1, 1, 1, 1, 1, 1.5),
ind = TRUE);
png("venn_5set.png");
grid.draw(venn.plot);
dev.off();
各种R包/因特网源提供辅助功能以基于例如计算重叠。二进制矩阵或集合元素列表。例如,R / Bioconductor包limma
提供了一个函数limma::vennCounts
,它根据二进制矩阵计算所有重叠的计数。因此,如果您不想编写自己的函数(就像我一样),您也可以使用它们。无论哪种方式,在更复杂的维恩图的情况下,我建议不手动计算重叠,因为它很容易出错(参见你的错误信息)。
答案 1 :(得分:0)
嗨Maurtis我试过你发布的剧本。 我知道excel中的重叠并最终获得:
library(VennDiagram);
venn.plot <- draw.quintuple.venn(
area1 = 104, area2 = 120, area3 = 117, area4 = 158, area5 = 107,
n12 = 59, n13 = 39, n14 = 55, n15 = 41,
n23 = 48, n24 = 71, n25 = 48,
n34 = 53, n35 = 53, n45 = 62,
n123 = 30, n124 = 44, n125 = 35,
n134 = 34, n135 = 30, n145 = 38,
n234 = 42, n235 = 35, n245 = 44,
n345 = 40, n1234 = 28, n1235 = 25, n1245 = 33,
n1345 = 27, n2345 = 32,
n12345 = 24,
category = c("A", "B", "C", "D", "E"),
fill = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
cat.col = c("dodgerblue", "goldenrod1", "darkorange1", "seagreen3", "orchid3"),
cat.cex = 2,
margin = 0.05,
cex = c(
1.5, 1.5, 1.5, 1.5, 1.5, 1, 0.8, 1, 0.8, 1, 0.8, 1, 0.8, 1, 0.8,
1, 0.55, 1, 0.55, 1, 0.55, 1, 0.55, 1, 0.55, 1, 1, 1, 1, 1, 1.5),
ind = TRUE);
png("venn_5set.png");
grid.draw(venn.plot);
dev.off();
但是我收到了一个错误:
draw.quintuple.venn中的错误(area1 = 104,area2 = 120,area3 = 117, area4 = 158,:不可能:a17&lt; - n135 - a27 - a29 - a31产生 负面区域
哪一个是17?