簡體   English   中英

R中的4路維恩圖?

[英]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)

結果2

第一種方法的優點之一是可以查詢每個區域中的元素:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM