使用R或Matplotlib(Python),如何基于CSV文件每行的值比较创建venn图?
我得到了一个需要制作维恩图的项目,我开始学习python(使用2.7),所以我想尝试学习R也会让我的工作负担过重。所以,我在网上了解了matplotlib。基本上,我需要做的是创建一个维恩图,它比较每列下的值以生成一个维恩图。因此,如果我的csv具有以下数据:使用R或Matplotlib(Python),如何基于CSV文件每行的值比较创建venn图?,python,r,csv,matplotlib,venn-diagram,Python,R,Csv,Matplotlib,Venn Diagram,我得到了一个需要制作维恩图的项目,我开始学习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(从9月开始)(
Month x y
Sept -1 1
Oct 0 1
Nov 1 1
Dec -1 -1
重叠将显示值2(因为nov和dec具有相同的值),x圆本身将显示值1(从9月开始)(需要忽略0),y圆将显示值2(从9月和10月开始)
我认为这是一个相当复杂的程序,但我不知道从哪里开始,除了从以下几个方面开始:
from matplotlib_venn import venn2
当我使用诸如之类的在线工具时,它只是查找列表之间相似的数字,而不是逐行比较。这将导致外圈的值为0,重叠部分的值为3(因为输入中有三个不同的值:-1、0和1)
或者,如果用R代替Python会很容易,你能帮我吗
感谢您的帮助!在R中,有许多选项可用于构建维恩图。您可以获得其中的一些选项
library(sos)
findFn('Venn diagramm')
例如,使用<代码> VnNexSt/<代码>(列表中的第一个)可以得到这个图。我使用随机值来生成它,因为您不清楚如何在问题中考虑共享和交叉区域。
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)
库(VennDiagram)
#您应该用您的值集替换此处的随机值
##
种子(1)
A在R中,有许多选项可用于构建维恩图。您可以获得其中的一些选项
library(sos)
findFn('Venn diagramm')
例如,使用<代码> VnNexSt/<代码>(列表中的第一个)可以得到这个图。我使用随机值来生成它,因为您不清楚如何在问题中考虑共享和交叉区域。
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)
库(VennDiagram)
#您应该用您的值集替换此处的随机值
##
种子(1)
A我不完全理解您的数字,但是matplotlib-venn
软件包非常容易使用。在您的示例中,您可以从文本中使用(Xy,Yx,Xy)=(1,2,2)
,只需运行
import matplotlib_venn as venn
v = venn.venn2((1, 2, 2))
v.get_label_by_id('A').set_text('x')
v.get_label_by_id('B').set_text('y')
文档很简单,也很简单。更棘手的是提取(Xy,Yx,Xy)
数据中的元组,但我真的不理解您的计算,抱歉。如果您能解释得更详细一些,也许我可以提供更多的建议。我不完全理解您的数字,但是matplotlib-venn
包非常容易使用。在您的示例中,使用(Xy,Yx,Xy)=(1,2,2)
从文本中,您只需运行
import matplotlib_venn as venn
v = venn.venn2((1, 2, 2))
v.get_label_by_id('A').set_text('x')
v.get_label_by_id('B').set_text('y')
文档很简单,也很简单。更棘手的是提取(Xy,Yx,Xy)
数据中的元组,但我不太理解您的计算,抱歉。如果您能解释得更详细一点,也许我可以提供更多的建议。这很好,谢谢!但实际上,我希望圆是x和y,因此重叠将是计算值相同的行数。这个月实际上是无关的ormation,很抱歉没有澄清。这很好,谢谢!但实际上,我希望圆圈是x和y,因此重叠将是数值相同的行数。月份实际上是无关信息,很抱歉没有澄清。