3

我使用 VennDiagram 来说明不同客户组之间的重叠——总体上和特定子段。我遇到的问题是 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
);
4

4 回答 4

1

use an if statement to see if the second set is larger than the first. if yes, then add 180 degrees to rotation.

于 2014-08-28T14:54:37.323 回答
1

它可以通过改变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()

在此处输入图像描述

于 2016-12-07T21:17:55.483 回答
0

如果语句可以解决问题,但对于这么小的任务来说似乎有点笨拙。我认为您可以简单地将以下行添加到您的脚本中

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

这应该可以解决问题(当 WM 长于 AD 语句为 True 并且情节反转时)。

于 2015-04-02T23:18:32.690 回答
0

这对我不起作用。圆圈中的数据翻转,但圆圈上的标签保持不变。不过,这种rotation方法奏效了。

于 2015-07-08T14:25:07.437 回答