Skip to main content
 首页 » 编程设计

python之使用 R 或 Matplotlib (Python),如何根据 CSV 文件每一行的值比较创建维恩图

2025年05月04日12yxwkf

我有一个需要制作维恩图的项目,并且我开始学习 python(使用 2.7),所以我认为尝试学习 R 也会让我的工作负担过重。所以,我在网上学习了matplotlib。基本上,我需要做的是创建一个维恩图,比较每列下的值以生成维恩图。因此,如果我的 csv 具有以下数据:

Month    x    y 
Sept    -1    1 
Oct    0    1 
Nov    1    1 
Dec    -1    -1 

重叠将显示值为 2(因为 nov 和 dec 具有相同的值),x 圆圈本身将显示值为 1,从 sept 开始(需要忽略 0),y 圆圈将从 9 月到 10 月显示值为 2。

我认为这是一个非常复杂的程序,但我不知道从哪里开始,除了从:

from matplotlib_venn import venn2 

当我使用 Venny 等在线工具时,它只是找到列表之间相似的数字,而不是逐行比较。这不会导致外圈中的值 0 和重叠中的数字 3(因为输入中存在三个不同的值:-1、0 和 1。

或者,如果使用 R 而不是 Python 会非常容易,你能帮我吗?

任何帮助将不胜感激,谢谢!

请您参考如下方法:

在 R 中有很多选项可以构建维恩图。你可以得到其中的一些

library(sos) 
findFn('Venn diagramm') 

例如使用VennDiagram(列表中的第一个)你可以得到这个图。我使用随机值生成它,因为您不太清楚您如何考虑问题中的共享区域和交叉区域。

library(VennDiagram) 
# You should replace the random values here by your set of values 
##  
set.seed(1) 
A <- sample(1:100, 25, replace = FALSE) 
B <- sample(1:100, 25, replace = FALSE) 
C <- sample(1:100, 25, replace = FALSE) 
D <- sample(1:100, 25, replace = FALSE) 
 
venn.plot <- venn.diagram( 
    x = list( 
        Sept = A, 
        Oct = D, 
        Nov = B, 
        Dec = C 
    ), 
    filename = NULL, 
    col = "transparent", 
    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 = 1.5, 
    fontfamily = "serif", 
    fontface = "bold", 
    cat.col = c("darkblue", "darkgreen", "orange", "darkorchid4"), 
    cat.cex = 1.5, 
    cat.pos = 0, 
    cat.dist = 0.07, 
    cat.fontfamily = "serif", 
    rotation.degree = 270, 
    margin = 0.2 
) 
 
grid.draw(venn.plot)