[英]4-way Venn Diagram in R?
我想在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軟件包的一個更簡單的解決方案。
我可能會忽略這一點,但我不確定你如何在制作維恩圖時使用這些“計數”? 從列'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)
請注意:我嘗試在支持這種功能的幾個包中構建4(和更高)的維恩圖,並且至少在一種情況下,子空間沒有被正確繪制。 例如,完全包含在另一個子集中的子集被繪制,其中一些區域延伸到父子集之外。 不幸的是我不記得哪個包那樣做了。
所以,我的回答是:盡量venneuler
作為GOA說,盡量require(sos); ???venn
require(sos); ???venn
使用新版本的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
VennDiagram包有4路Venn的功能,即draw.quad.venn()函數:
http://cran.r-project.org/web/packages/VennDiagram/VennDiagram.pdf
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.