使用Package'nVennR'转换数据以创建通用的,准比例的维恩图

时间:2018-03-25 01:06:18

标签: r algorithm venn-diagram

我有以下数据集,希望您能够对其进行转换,以便能够使用Package ‘nVennR’ Pérez-Silva et al. 2018来绘制维恩图。

这是数据集:

#google_center_div {
  display: table-cell;
  vertical-align: middle;
}

请参阅下面我想要获得的维恩图的示例:

enter image description here

更新

安装dput(data) structure(list(Employee = c("A001", "A002", "A003", "A004", "A005", "A006", "A007", "A008", "A009", "A010", "A011", "A012", "A013", "A014", "A015", "A016", "A017", "A018"), SAS = c("Y", "N", "Y", "Y", "Y", "Y", "N", "Y", "N", "N", "Y", "Y", "Y", "Y", "N", "N", "N", "N"), Python = c("Y", "Y", "Y", "Y", "N", "N", "N", "N", "N", "N", "Y", "Y", "N", "N", "N", "N", "Y", "Y"), R = c("Y", "Y", "N", "Y", "N", "Y", "N", "N", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "N", "N")), .Names = c("Employee", "SAS", "Python", "R"), row.names = c(NA, -18L), class = c("tbl_df", "tbl", "data.frame" )) nVennR的更新版本后,当我从here运行示例代码时,我会收到以下错误和图表:

rsvg

enter image description here

以下是我的会话信息:

Warning message:
In checkValidSVG(doc, warn = warn) :
This picture was not generated by the 'grConvert' package, errors may result

我很感激有任何想法来解决这个问题。

4 个答案:

答案 0 :(得分:2)

以下是使用limma中的Bioconductor包并将dput中的数据作为变量z加载的一种方法:

source("http://www.bioconductor.org/biocLite.R")
biocLite("limma")
library(limma)

将所有Y更改为TRUE,将所有N更改为FALSE:

z2 <- data.frame(lapply(z, function(x) { gsub("Y", "TRUE", x) }))
z3 <- data.frame(lapply(z2, function(x) { gsub("N", "FALSE", x) }),stringsAsFactors=FALSE)

确保它们都是逻辑类型:

z3$SAS <- as.logical(z3$SAS)
z3$Python <- as.logical(z3$Python)
z3$R <- as.logical(z3$R)

现在使用vennCounts计算每个维恩地区的所有总数:

> ( venn.totals <- vennCounts(z3[,-1]) )
  SAS Python R Counts
1   0      0 0      1
2   0      0 1      4
3   0      1 0      2
4   0      1 1      1
5   1      0 0      2
6   1      0 1      3
7   1      1 0      1
8   1      1 1      4
attr(,"class")
[1] "VennCounts"

制作图表只需再做一步:

vennDiagram(venn.totals)

enter image description here

答案 1 :(得分:1)

很高兴有这么快的反馈。也许我们应该在文件中说明这个版本的nVennR是初步的。一些研究人员要求快速运行nVenn,所以我只是将C ++代码包装成几个R函数。如您所见,结果显示在viewer窗口中,而不是plot窗口中。我正在学习。 由于我对此软件包感兴趣,因此我正在编译要添加到下一版本的功能列表。更好的输入选项肯定在该列表中。此外,对输出的更多控制(顺便说一下,如果颜色在路上,你可以将opacity设置为0)。

关于这个问题,@ mysRious是对的,你将列表发送给该函数。一个快速的方法是

sas <- subset(data, SAS == "Y")$Employee
python <- subset(data, Python == "Y")$Employee
rr <- subset(data, R == "Y")$Employee
mySVG <- toVenn(sas, python, rr)
showSVG(mySVG = mySVG, opacity = 0.1)

下一个版本将有一个单独输入名称的方法(对不起)

答案 2 :(得分:1)

快速通知您,nVennR的新版本已准备就绪。输入和输出控制现在不同,toVenn已弃用,将由plotVenn替换。有一个小插图有几个例子,其中一个例子使用了这个问题中的数据here

答案 3 :(得分:0)

关于标签,简短的回答是您可以使用SVG编辑器(例如Inkscape)自行编辑它们。如果已安装,则可以通过运行showSVG(mySVG = mySVG, opacity = 0.1, systemShow=T)在编辑器中打开图形。您还可以通过提供输出文件(outFile)来保存图形,或者只打开生成的临时文件。

更长的答案是name1,name2,...可以替换为列表的名称。不幸的是,由于我在R中的限制,我没有意识到这可能不是直截了当的。将每个变量加载为表并设置colNames会更容易。例如,

sas <- as.table(subset(data, SAS == "Y")$Employee)
names(sas) <- 'SAS'

该标签将用于图例。关于小标签,目前用户无法更改它们。这些是为了帮助读取特定区域的位置,当这些区域很小时,使用更长的标签似乎是不可行的。我的建议是始终使用外部编辑器来改变它们。未来版本至少能够删除这些标签,例如Web版本。