我有一组微阵列数据,我想根据附图(用PowerPoint完成)表示它。我尝试了R可用的各种软件包(VennDiagram,venneuler,limma)。但是,我无法按比例绘制数据或显示值。
有谁知道如何做?
可以玩的代码可以在下面找到!
谢谢!
# you might need these:
source("http://www.bioconductor.org/biocLite.R")
biocLite("limma")
library(VennDiagram)
library(limma)
library(venneuler)
# Trial 1: Kind of proportional but difficult to customize for labels and other stuff
su <- venneuler(c(A=162, B=104, C=86, "A&B"=206, "A&C"=112, "B&C"=90 ,"A&B&C"=2433))
plot(su)
# Trial 2: looks nice but not proportional
hw <- c(F,F,F,F,T,T,T,T)
hm <- c(F,F,T,T,F,F,T,T)
hr <- c(F,T,F,T,F,T,F,T)
c4 <- cbind(hw,hm,hr)
e <- vennCounts(c4)
e[1:8,4] <- c(3193,86,104,90,162,112,206,2433)
vennDiagram(e)
Run Code Online (Sandbox Code Playgroud)

我认为维恩图是比较数据的极有用的方法。问题在于,一旦我开始拥有多个(3个或更多)类,圆圈的大小就不再能够指示重叠的大小。
我想做的是通过重叠的大小而不是类标签的大小为维恩图中的每个字段着色:
例如,当我绘制普通的维恩图时:
require(VennDiagram)
# Make data
oneName <- function() paste(sample(LETTERS,5,replace=TRUE),collapse="")
geneNames <- replicate(1000, oneName())
GroupA <- sample(geneNames, 400, replace=FALSE)
GroupB <- sample(geneNames, 750, replace=FALSE)
GroupC <- sample(geneNames, 250, replace=FALSE)
GroupD <- sample(geneNames, 300, replace=FALSE)
v1 <- venn.diagram(list(A=GroupA, B=GroupB, C=GroupC, D=GroupD), filename=NULL, fill=rainbow(4))
grid.newpage()
grid.draw(v1)
Run Code Online (Sandbox Code Playgroud)
看起来像这样:

最终的维恩图被分为15个单独的字段,每个字段都有自己的颜色和数字。每个单独字段的颜色由fill参数指示的类别/组的颜色确定。
我要做的是改为使用指示字段大小的颜色渐变为每个单独的字段上色,以便在视觉上易于发现最大/最小的组(类似于热图/水平图的着色方式)
有没有办法在R中做到这一点?
我做了一个三向维恩图.我有三个问题似乎无法解决.
移动圆圈标签的代码是什么(即"Set1","Set2","Set3")因为现在距离圆圈太远了.
将圆圈设为三个相同尺寸/更改圆圈尺寸的代码是什么?
围绕绘图移动圆圈的代码是什么.现在,set2在set3内(但颜色不同),我希望该图看起来更像是显示维恩图的"标准"方式(即3个独立的圆圈,中间有一些重叠).
另一方面,我发现很难找到诸如"set_x","set_alpha"之类的命令; 如果有人知道一本可以通过上述问题回答的手册我会很感激,我似乎无法找到一个包含我需要的所有信息的地方.
import sys
import numpy
import scipy
from matplotlib_venn import venn3,venn3_circles
from matplotlib import pyplot as plt
#Build three lists to make 3 way venn diagram with
list_line = lambda x: set([line.strip() for line in open(sys.argv[x])])
set1,set2,set3 = list_line(1),list_line(2),list_line(3)
#Make venn diagram
vd = venn3([set1,set2,set3],set_labels=("Set1","Set2","Set3"))
#Colours: get the HTML codes from the net
vd.get_patch_by_id("100").set_color("#FF8000")
vd.get_patch_by_id("001").set_color("#5858FA")
vd.get_patch_by_id("011").set_color("#01DF3A")
#Move the numbers in the circles
vd.get_label_by_id("100").set_x(-0.55)
vd.get_label_by_id("011").set_x(0.1)
#Strength of color, 2.0 is very strong.
vd.get_patch_by_id("100").set_alpha(0.8)
vd.get_patch_by_id("001").set_alpha(0.6)
vd.get_patch_by_id("011").set_alpha(0.8)
plt.title("Venn …Run Code Online (Sandbox Code Playgroud) 如何在一个PDF页面中并排绘制网络图(igraph包图)和维恩图(VennDiagram gList对象)?
尝试遵循以下解决方案,但不起作用:
并排
绘制gList 并排绘制2个tmap对象
使用Vennerable并排Venn图
这是一个示例,将它们分为两页。我曾经grid.newpage()将其绘制在单独的页面中,否则它将被绘制在彼此的顶部。
library(grid)
library(igraph)
library(VennDiagram)
#network graph object
relations <- data.frame(from=c("Bob", "Cecil", "Cecil", "David",
"David", "Esmeralda"),
to=c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"))
g <- graph_from_data_frame(relations, directed=TRUE)
# venn plot object
plotVenn <- venn.diagram(
list(A = 1:150, B = 121:170),
filename = NULL)
class(plotVenn)
# [1] "gList"
# output to PDF, outputs into 2 pages, I need 1 page 2 plots side-by-side
pdf("temp.pdf")
#network
igraph::plot.igraph(g)
#venn …Run Code Online (Sandbox Code Playgroud) 我一直在寻找如何以编程方式显示内部标签(重叠项)来绘制维恩图。代码中没有错误,但是我仍然无法弄清楚该如何解决。
require(VennDiagram)
AA <- c("hi","foo", "bar","yep","woo","hoo")
BB <- c("baa","yep", "woo","yes")
CC <- c("yes","foo","hi","woo", "huh")
x <- list(AA=AA , BB=BB , CC=CC)
v0 <- venn.diagram( x, filename=NULL)
grid.draw(v0)
overlaps <- calculate.overlap(x)
#overlaps <- rev(overlaps)
for (i in 1:length(overlaps)){
v0[[i+6]]$label <- paste(overlaps[[i]], collapse = "\n") # labels start at position 7 in the list for Venn's with 3 circles
}
grid.newpage()
grid.draw(v0)
Run Code Online (Sandbox Code Playgroud)
使用VennDiagram包,我通过以下方式生成两个图形:
# First graph
VennDiagram::draw.pairwise.venn(
area1 = 100,
area2 = 70,
cross.area = 30,
category = c("A1", "B1"),
fill = c("#00204DFF", "#FFEA46FF")
) -> vg1
# Second graph
VennDiagram::draw.pairwise.venn(
area1 = 120,
area2 = 80,
cross.area = 10,
category = c("A2", "B2"),
fill = c("#000004FF", "#FCFFA4FF")
) -> vg2
Run Code Online (Sandbox Code Playgroud)
通过调用时grid::grid.draw(vg1),grid::grid.draw(vg2)图表按预期显示:
我如何创建一个将两个图都放在另一个图下的网格对象?
grdFrme <- grid::grid.frame(name = "gf")
grid::grid.pack("gf", vg1)
Run Code Online (Sandbox Code Playgroud)
packGrob(grid.get(gPath),grob,side,row,row.before,row.after中的错误:无效的'grob'
我正在使用 R 来构建交互式维恩图。我目前正在使用 VennDiagram 库来执行此操作,但使用该库无法制作交互式维恩图。任何人都可以帮助我吗?
Hi\xef\xbc\x8c我看到有人计算维恩图重叠 p 值,如下例所示。他们使用超几何分布和 R。当我在 R 中应用他们的函数时,我只是无法得到相同的结果。谁能帮我解决这个问题吗?
\n\n我在别人的出版物中看到的示例:
\n\n从15220个基因中,A组是1850+195个基因,B组是195+596个基因,重叠是195个基因。它们的 p 值为 2e-26。
\n\n他们的方法是:给定总共N个基因,如果基因集A和B分别包含m和n个基因,并且其中k个基因是共同的,则富集的p值计算如下:
\n\np = \xce\xa3 (m,i)(N-m,n-i)/(N,n)\nRun Code Online (Sandbox Code Playgroud)\n\n对于ifromk到min(m,n),其中“ (m,i)”表示二项式形式。
我使用 R 的方式是:
\n\nsum(choose(596+195,195:(195+596))*choose(15220-596-195,(1850+195)-195:(195+596)))/choose(15220,1850+195)。
我有NaN。
或者使用:phyper(195,1850+195,15220-1850-195,596+195),我得到 1。
我还参考了链接http://www.pangloss.com/wiki/VennSignificance \n但是当我计算时
\n\n1 - phyper(448,1000,13800,2872)在 R 中,我得到的链接是 0 而不是 1.906314e-81。
我对 R 和统计完全陌生,很抱歉在这里发布了很多错误。
\n我正在尝试为维恩图的每个部分添加百分比。我曾尝试使用 paste 将圆圈标题与百分比连接起来。然而,不幸的是,这并不完全有效,因为它只提供每个独立组的百分比,而不提供每个交叉点的百分比,因为交叉点没有标题。理想情况下,我希望百分比在圆圈内。例如,我希望中间的三重交叉点(工作、学习、娱乐)表示“83, 20.54%”,而不是当前表示的“83”。
以下是我正在使用的代码的基本示例:
g = draw.triple.venn(
area1 = 396,
area2 = 273,
area3 = 147,
n12 = 266,
n23 = 86,
n13 = 143,
n123 = 83,
category = c("Study", "Work", "Play"),
fill = c("blue", "red", "green"),
euler.d=TRUE,
scaled=TRUE, ind = FALSE,
)
require(gridExtra)
grid.arrange(gTree(children=g), main="Title", sub="subtitle")
Run Code Online (Sandbox Code Playgroud) venn-diagram ×10
r ×8
python ×2
r-grid ×2
charts ×1
igraph ×1
list ×1
matplotlib ×1
p-value ×1
percentage ×1
plot ×1