GNU R,VennDiagram,并制作补充图

时间:2012-02-20 20:27:45

标签: r venn-diagram statistics

我一直在使用GNU R中的Venn Diagrams。我尝试过使用venneuler和VennDiagram软件包。我发现VennDiagram有更多细粒度控制,但它似乎缺乏填写所有细节的文档。我能找到的最接近的是这个PPT文件。 我在网址中找到了http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3041657/bin/1471-2105-12-35-S4.PPThttp://www.ncbi.nlm.nih.gov/pmc/articles/PMC3041657/

以下是使用VennDiagram的问题。

代码

require(VennDiagram)
venn.diagram(list(B = 1:2000, A = 200:400),fill = c("yellow", "blue"), 
alpha = c(0.8, 0.8), cex =1.5, cat.pos=0, cat.fontface = 4,
lty = 1, fontfamily =3, filename = "test001.jpeg");

(我这里有一张图片,但由于我是新手,我无权发布图片。请从上面的代码生成图片。)

我可以制作一个子集(因此是一个圆圈内的圆圈)。但我没有找到办法做到以下几点:

  1. 使BC显示为等于B ^ C.不,文字“B ^ C”不起作用。我认为有一种方法可以在不同的属性中重新标记这些集合,但我还没有看到这样做的方法。
  2. 将B ^ C和A ^ C的标签定位在集合内,而不是如当前所示在外面。我试过cat.pos =“inner”,但那不是一个有效的属性。我也尝试过cat.pos = c(0,0),希望我可以把它作为X,Y来喂它,其中X& Y来自圆心,但没有产生任何不同的结果。

  3. 感谢DWin,这是完成练习图表的代码。 假设A⊂B。表明B c ⊂A c

    require(VennDiagram)
    plot.new()
    venn.plot <- venn.diagram(
    x = list(B = 1:200, A = 20:40), category.names= expression(B, A), 
              fill = c("yellow", "blue"), alpha = c(0.8, 0.8), cex =1.5, 
              cat.pos=0, cat.dist=c(-.1, -.1),  filename = NULL) ;
    grid.draw(venn.plot); # grid graphic requires explicit print or draw operation
    grid.text(expression(B^c),x=0.2,y=0.95)
    grid.text(expression(A^c),x=0.16,y=0.95)
    grid.text(expression(A^c),x=0.16,y=0.75)
    

1 个答案:

答案 0 :(得分:1)

也许是这样的:

 venn.diagram(list(B = 1:200, A = 20:40), category.names= expression(B^c, A), 
            fill = c("yellow", "blue"), alpha = c(0.8, 0.8), cex =1.5, cat.pos=0, 
            cat.dist=c(.1, -.1), cat.fontface = 4,lty = 1, fontfamily =3,
            filename = "test001.jpeg")

要获取圈子内的标签,请为“cat.dist”提供负值。诀窍在于参考点是距离边界12点的径向距离,而不是距离中心的距离。文档说明了category.names参数是用plotmath语法解释的。 plotmath中的上标操作是使用“^”运算符完成的。我在这里移动A“内部,同时离开B ^ c外面,表明它是B圈外面被标记的区域。(我还通过使示例更小来改善绘图时间。)我尝试绘制三个标签但这似乎并不是“一揽子计划的一部分”。

enter image description here

这是一种可以在屏幕设备上使用grid.text()进行注释的方法:

plot.new()
venn.plot <- venn.diagram(
 x = list(B = 1:200, A = 20:40), category.names= expression(B^c, A), 
          fill = c("yellow", "blue"), alpha = c(0.8, 0.8), cex =1.5, 
          cat.pos=0, cat.dist=c(.05, -.1),  filename = NULL) ;
 grid.draw(venn.plot); # grid graphic requires explicit print or draw operation
 grid.text("B",x=0.8)
# then you can save to file