使用“nVennR”包转换数据以创建广义的、准比例的维恩图
Transforming data to create generalized, quasi-proportional Venn diagrams using Package ‘nVennR’
我有以下数据集,希望您帮助转换它,以便能够使用 Package ‘nVennR’ by Pérez-Silva et al. 2018.
绘制维恩图
这是数据集:
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
和 rsvg
的更新版本后,当我 运行 来自 here 的示例代码时,我得到以下错误和图表:
Warning message:
In checkValidSVG(doc, warn = warn) :
This picture was not generated by the 'grConvert' package, errors may result
以下是我的会话信息:
sessionInfo()
R version 3.4.2 (2017-09-28)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
other attached packages:
[1] nVennR_0.2.0
loaded via a namespace (and not attached):
[1] Rcpp_0.12.16 lattice_0.20-35 XML_3.98-1.10
[4] png_0.1-7 rsvg_1.1 grid_3.4.2
[7] plyr_1.8.4 gtable_0.2.0 scales_0.5.0.9000
[10] ggplot2_2.2.1.9000 pillar_1.2.1 rlang_0.2.0.9001
[13] grImport2_0.1-2 lazyeval_0.2.1 Matrix_1.2-12
[16] tools_3.4.2 munsell_0.4.3 jpeg_0.1-8
[19] compiler_3.4.2 base64enc_0.1-3 colorspace_1.3-2
[22] tibble_1.4.2
如果有任何解决此问题的想法,我将不胜感激。
这是使用 Bioconductor
中的 limma
包的一种方法,您的数据从 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)
很高兴这么快收到反馈。也许我们应该在文档中说明这个版本的 nVennR 是初步的。一些研究人员要求提供 运行 nVenn 的快速方法,因此我只是将 C++ 代码包装到几个 R 函数中。如您所见,结果显示在 viewer
window 中,而不是 plot
window 中。我边走边学。
由于我看到有人对这个包感兴趣,所以我正在编制一个功能列表以添加到下一个版本中。更好的输入选项肯定在该列表中。此外,对输出的更多控制(顺便说一下,如果颜色挡住了路,您可以将 opacity
设置为 0)。
关于这个问题,@mysteRious 是对的,你将列表发送给函数。一个快速的方法是
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)
下个版本会有单独输入名字的方法(不好意思)
关于标签,简短的回答是您可以使用 SVG 编辑器(例如 Inkscape)自行编辑它们。如果你安装了它,你可以通过 运行 showSVG(mySVG = mySVG, opacity = 0.1, systemShow=T)
在编辑器中打开图形。您还可以通过提供输出文件 (outFile
) 或只打开生成的临时文件来保存图形。
稍微长一点的答案是,name1, name2,... 可以用列表的名称替换。不幸的是,由于我在 R 方面的局限性,我没有意识到这可能并不简单。将每个变量加载为 table 并设置 colNames 会更容易。例如,
sas <- as.table(subset(data, SAS == "Y")$Employee)
names(sas) <- 'SAS'
该标签将用于图例。对于小标签,目前用户无法更改。这些是为了帮助读取特定区域的位置,当这些区域很小时,使用更长的标签似乎不可行。我的建议是始终使用外部编辑器来更改它们。未来的版本至少会像 Web 版本一样删除这些标签。
只是一个简短的说明,让您知道新版本的 nVennR 已经准备就绪。输入和输出控制现在不同,toVenn
已弃用,由 plotVenn
代替。有一个带有几个例子的小插图,其中一个使用了这个问题中的数据,here。
我有以下数据集,希望您帮助转换它,以便能够使用 Package ‘nVennR’ by Pérez-Silva et al. 2018.
绘制维恩图这是数据集:
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
和 rsvg
的更新版本后,当我 运行 来自 here 的示例代码时,我得到以下错误和图表:
Warning message:
In checkValidSVG(doc, warn = warn) :
This picture was not generated by the 'grConvert' package, errors may result
以下是我的会话信息:
sessionInfo()
R version 3.4.2 (2017-09-28)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
other attached packages:
[1] nVennR_0.2.0
loaded via a namespace (and not attached):
[1] Rcpp_0.12.16 lattice_0.20-35 XML_3.98-1.10
[4] png_0.1-7 rsvg_1.1 grid_3.4.2
[7] plyr_1.8.4 gtable_0.2.0 scales_0.5.0.9000
[10] ggplot2_2.2.1.9000 pillar_1.2.1 rlang_0.2.0.9001
[13] grImport2_0.1-2 lazyeval_0.2.1 Matrix_1.2-12
[16] tools_3.4.2 munsell_0.4.3 jpeg_0.1-8
[19] compiler_3.4.2 base64enc_0.1-3 colorspace_1.3-2
[22] tibble_1.4.2
如果有任何解决此问题的想法,我将不胜感激。
这是使用 Bioconductor
中的 limma
包的一种方法,您的数据从 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)
很高兴这么快收到反馈。也许我们应该在文档中说明这个版本的 nVennR 是初步的。一些研究人员要求提供 运行 nVenn 的快速方法,因此我只是将 C++ 代码包装到几个 R 函数中。如您所见,结果显示在 viewer
window 中,而不是 plot
window 中。我边走边学。
由于我看到有人对这个包感兴趣,所以我正在编制一个功能列表以添加到下一个版本中。更好的输入选项肯定在该列表中。此外,对输出的更多控制(顺便说一下,如果颜色挡住了路,您可以将 opacity
设置为 0)。
关于这个问题,@mysteRious 是对的,你将列表发送给函数。一个快速的方法是
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)
下个版本会有单独输入名字的方法(不好意思)
关于标签,简短的回答是您可以使用 SVG 编辑器(例如 Inkscape)自行编辑它们。如果你安装了它,你可以通过 运行 showSVG(mySVG = mySVG, opacity = 0.1, systemShow=T)
在编辑器中打开图形。您还可以通过提供输出文件 (outFile
) 或只打开生成的临时文件来保存图形。
稍微长一点的答案是,name1, name2,... 可以用列表的名称替换。不幸的是,由于我在 R 方面的局限性,我没有意识到这可能并不简单。将每个变量加载为 table 并设置 colNames 会更容易。例如,
sas <- as.table(subset(data, SAS == "Y")$Employee)
names(sas) <- 'SAS'
该标签将用于图例。对于小标签,目前用户无法更改。这些是为了帮助读取特定区域的位置,当这些区域很小时,使用更长的标签似乎不可行。我的建议是始终使用外部编辑器来更改它们。未来的版本至少会像 Web 版本一样删除这些标签。
只是一个简短的说明,让您知道新版本的 nVennR 已经准备就绪。输入和输出控制现在不同,toVenn
已弃用,由 plotVenn
代替。有一个带有几个例子的小插图,其中一个使用了这个问题中的数据,here。