我有以下数据集,希望您能够对其进行转换,以便能够使用Package ‘nVennR’ Pérez-Silva et al. 2018来绘制维恩图。
这是数据集:
#google_center_div {
display: table-cell;
vertical-align: middle;
}
请参阅下面我想要获得的维恩图的示例:
安装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
以下是我的会话信息:
Warning message:
In checkValidSVG(doc, warn = warn) :
This picture was not generated by the 'grConvert' package, errors may result
我很感激有任何想法来解决这个问题。
答案 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)
答案 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版本。