2014-05-15 141 views
2

我使用VennDiagram來說明不同客戶集合之間的重疊 - 總共和特定子分段之間的重疊。我遇到的問題是VennDiagram自動將輸出中的圓從最大到最小排列。在這兩個圖中,我創建的兩個種羣的相對大小正在翻轉,因此在輸出中,圖的種羣/顏色是相反的。我想把這些並排放在一個文件中,而人口秩序的翻轉使得並排比較有點混亂。R/VennDiagram中集合的手動訂購

每個代碼的示例代碼如下 - 是否有辦法手動強制輸出中的集合的排序,以便羣集按照相同的順序排序?

謝謝 -

venn.plot <- venn.diagram(
x = list(
"AD" = 1:703814, 
"WM" = 672279:1086933 
), 
height = 4000 , 
width = 4000 , 
units = 'px', 
filename = "H:\\AD_vs_WM_Total.tiff", 
scaled = TRUE, 
ext.text = TRUE, 
lwd = 1, 
ext.line.lwd = 1, 
ext.dist = -0.15, 
ext.length = 0.9, 
ext.pos = -4, 
fill = c("cornflowerblue", "darkorchid1"), 
cex = 1.5, 
cat.cex = 2, 
cat.col = c("black", "black"), 
cat.pos = c(120,300) , 
rotation.degree = 45, 
main = "AD vs. WM", 
sub = "Total Populations", 
main.cex = 2, 
sub.cex = 1.5 
); 

venn.plot <- venn.diagram(
x = list(
"AD" = 1:183727, 
"WM" = 173073:383052 
), 
height = 4000 , 
width = 4000 , 
units = 'px', 
filename = "H:\\AD_vs_WM_Target.tiff", 
scaled = TRUE, 
ext.text = TRUE, 
lwd = 1, 
ext.line.lwd = 1, 
ext.dist = -0.15, 
ext.length = 0.9, 
ext.pos = -4, 
fill = c("cornflowerblue", "darkorchid1"), 
cex = 1.5, 
cat.cex = 2, 
cat.col = c("black", "black"), 
cat.pos = c(120,300) , 
rotation.degree = 45, 
main = "AD vs. WM", 
sub = "Target Populations", 
main.cex = 2, 
sub.cex = 1.5 
); 

回答

1

使用,如果看到語句如果第二組比第一大。如果是的話,然後加180度旋轉。

0

如果聲明會做的伎倆,但似乎有點沉重,這樣一個小任務。我想你可以簡單地添加以下行到腳本

inverted=length(x$AD) < length(x$WM) 

這應該做的伎倆(當WM長於AD報告的真實,情節反轉)。

0

這不適合我。圓圈中的數據翻轉,但圓圈上的標籤保持不變。但是,rotation方法奏效。

0

可以通過修改draw.pairwise.venn()函數中的gList對象來解決。 venn.diagram()是許多draw.____.venn()函數的封裝(例如:pairwise, quad, quintuple, single等)

使用if語句在您的示例中查找總體標籤中的任何開關。如果屬實,則更改inverted = TRUE並切換標籤。

也使用ind = FALSE來防止繪製圖。

我用你的例子來顯示你在問題中發佈的兩個維恩圖之一的解決方案。

packageVersion("VennDiagram") 
# [1] ‘1.6.17’ 

AD <- 1:703814 
WM <- 672279:1086933 
overlap <- calculate.overlap(x = list('AD' = AD, 'WM' = WM)) 
area_overlap <- sapply(overlap, length) 

g <- draw.pairwise.venn(area1 = area_overlap[1], 
         area2 = area_overlap[2], 
         cross.area = area_overlap[3], 
         category = c("AD", "WM"), 
         ind = FALSE, 
         inverted = FALSE, 
         scaled = TRUE, 
         ext.text = TRUE, 
         lwd = 1, 
         ext.line.lwd = 1, 
         ext.dist = -0.15, 
         ext.length = 0.9, 
         ext.pos = -4, 
         fill = c("cornflowerblue", "darkorchid1"), 
         cex = 6, 
         cat.cex = 6, 
         cat.col = c("black", "black"), 
         cat.dist = c(-0.16, -0.09), 
         cat.pos = c(0,10), 
         rotation.degree = 35) 

# check for switch in labels 
if(area_overlap[1] != (as.integer(g[[5]]$label) + as.integer(g[[7]]$label)) && area_overlap[2] != (as.integer(g[[6]]$label) + as.integer(g[[7]]$label))){ 
    # change inverted to TRUE 
    g <- draw.pairwise.venn(area1 = area_overlap[1], 
          area2 = area_overlap[2], 
          cross.area = area_overlap[3], 
          category = c("AD", "WM"), 
          ind = FALSE, 
          inverted = TRUE, 
          scaled = TRUE, 
          ext.text = TRUE, 
          lwd = 1, 
          ext.line.lwd = 1, 
          ext.dist = -0.15, 
          ext.length = 0.9, 
          ext.pos = -4, 
          fill = c("cornflowerblue", "darkorchid1"), 
          cex = 6, 
          cat.cex = 6, 
          cat.col = c("black", "black"), 
          cat.dist = c(-0.16, -0.09), 
          cat.pos = c(0,10), 
          rotation.degree = 35) 

    # switch labels 
    tmp_var  <- g[[6]]$label 
    g[[6]]$label <- g[[5]]$label 
    g[[5]]$label <- tmp_var 
    rm(tmp_var) 
} 

jpeg("AD_vs_WM_Total_new.jpg", width = 1200, height = 1200) 
plot.new() 
title(main = "AD vs. WM", sub = "Total Populations", cex.main = 6, cex.sub = 5, line = -4, outer = TRUE) 
grid.draw(g) 
dev.off() 

enter image description here