我正在尝试在R中制作一个四维维恩图。 我有这些数据,我想把它放在图表中:
任何人都可以给我一个建议怎么做吗?我尝试使用函数vennDiagram(),但这不起作用,因为它是一个4路图。
我也在尝试使用VennDiagram软件包,但是数据被“分配”到图中正确位置的方式实在令人困惑。我正在使用此代码:
library (VennDiagram)
venn.diagram(
x=list(
I=c(1:18,19:31,32:119,125:129,130:192,193:144,145:326,327:373),
VI=c(516:542,510:515,420:497,498:509,145:326,327:373,130:192,193:144),
II=c(19:31,32:119,145:326,327:373,374:378,378:419,420:497,498:509),
III=c(506:509,378:419,32:119,125:129,130:192,145:326,420:497,510:515)
),
filename = "4Way_Venn.tiff",
col = "black",
lty = "dotted",
lwd = 4,
fill = c("cornflowerblue", "green", "yellow", "darkorchid1"),
alpha = 0.50,
label.col = c("orange", "white", "darkorchid4", "white", "white", "white",
"white", "white", "darkblue", "white", "white", "white",
"white", "darkgreen", "white"),
cex = 2.5,
fontfamily = "serif",
fontface = "bold",
cat.col = c("darkblue", "darkgreen", "orange", "darkorchid4"),
cat.cex = 2.5,
cat.fontfamily = "serif"
);
任何人都可以帮助我吗?也许使用更简单的解决方案然后使用VennDiagram包。
答案 0 :(得分:4)
我可能会忽略这一点,但我不确定你是如何使用这些'计数'制作维恩图?从列#c1'到' c4'您可以使用venneuler包非常轻松地制作维恩图:
require(venneuler)
#here I replicate your data
#because it's repeatable, you can use `rep` function to generate it
c1 <- rep(c(0,1),each=8)
c2 <- rep(c(0,1),each=4,times=2)
c3 <- rep(c(0,1),each=2,times=4)
c4 <- rep(c(0,1),times=8)
#put your data into matrix
m <- as.matrix(data.frame(C1=c1,C2=c2,C3=c3,C4=c4))
#plot it
v = venneuler(m)
plot(v)
答案 1 :(得分:3)
请注意:我尝试在支持此类功能的几个包中构建4(和更高)的维恩图,并且至少在一种情况下,未正确绘制子空间。例如,完全包含在另一个子集中的子集被绘制,其中一些区域延伸到父子集之外。不幸的是,我不记得是哪一个包那样做的
所以,我的答案是:尝试venneuler
,因为GOA说,尝试require(sos); ???venn
,并确保仔细测试每个包,以确保它呈现交叉点
正确。
答案 2 :(得分:1)
使用新版本的nVennR软件包(0.2.0),您可以通过两种方式实现:
1)从您提供的代码中
myV <- plotVenn(list(I=c(1:18,19:31,32:119,125:129,130:192,193:144,145:326,327:373),
IV=c(516:542,510:515,420:497,498:509,145:326,327:373,130:192,193:144),
II=c(19:31,32:119,145:326,327:373,374:378,378:419,420:497,498:509),
III=c(506:509,378:419,32:119,125:129,130:192,145:326,420:497,510:515)),
setColors = c("cornflowerblue", "green", "yellow", "darkorchid1"), borderWidth=3, opacity=0.2)
2)直接来自第一个列表,
myV2 <- createVennObj(nSets = 4, sNames = c("c1", "c2", "c3", "c4"), sSizes = c(26, 27, 4, 6, 5, 12, 42, 78, 18, 52, 4, 63, 13, 47, 88, 182))
myV2 <- plotVenn(nVennObj = myV2)
第一种方法的优点之一是可以查询每个区域中的元素:
getVennRegion(myV, c("I", "III"))
[1] 125 126 127 128 129
答案 3 :(得分:0)
VennDiagram包有4路Venn的功能,即draw.quad.venn()函数:
http://cran.r-project.org/web/packages/VennDiagram/VennDiagram.pdf