使用以下代码,我尝试创建维恩图,然后将其保存为文件。
import matplotlib
from matplotlib_venn import venn2
set1 = set(['A', 'B', 'C', 'D'])
set2 = set(['B', 'C', 'D', 'E'])
plt = venn2([set1,set2],('Set1','Set2'))
plt.savefig('test.png')
Run Code Online (Sandbox Code Playgroud)
但它给了我错误。正确的做法是什么?
这是我在 Ipython 下执行的示例图:

我有下面的工作代码。
from matplotlib import pyplot as plt
import numpy as np
from matplotlib_venn import venn3, venn3_circles
Gastric_tumor_promoters = set(['DPEP1', 'CDC42BPA', 'GNG4', 'RAPGEFL1', 'MYH7B', 'SLC13A3', 'PHACTR3', 'SMPX', 'NELL2', 'PNMAL1', 'KRT23', 'PCP4', 'LOX', 'CDC42BPA'])
Ovarian_tumor_promoters = set(['ABLIM1','CDC42BPA','VSNL1','LOX','PCP4','SLC13A3'])
Gastric_tumor_suppressors = set(['PLCB4', 'VSNL1', 'TOX3', 'VAV3'])
#Ovarian_tumor_suppressors = set(['VAV3', 'FREM2', 'MYH7B', 'RAPGEFL1', 'SMPX', 'TOX3'])
venn3([Gastric_tumor_promoters,Ovarian_tumor_promoters, Gastric_tumor_suppressors], ('GCPromoters', 'OCPromoters', 'GCSuppressors'))
venn3([Gastric_tumor_promoters,Ovarian_tumor_promoters, Gastric_tumor_suppressors], ('GCPromoters', 'OCPromoters', 'GCSuppressors'))
plt.show()
Run Code Online (Sandbox Code Playgroud)
如何在这 3 个圆圈中显示每个集合的内容?颜色 alpha 为 0.6。圆圈必须更大以容纳所有符号。
我正在使用 matplotlib-venn 包在 python 中绘制维恩图。这个包非常适合用两到三组绘制维恩图。但是,当其中一组比其他组大得多时,较小圆圈中的计数可能会接近或重叠。这是一个例子。
from collections import Counter
import matplotlib.pyplot as plt
from matplotlib_venn import venn2, venn3
sets = Counter()
sets['01'] = 3000
sets['11'] = 3
sets['10'] = 5
setLabels = ['set1', 'set2']
plt.figure()
ax = plt.gca()
v = venn2(subsets = sets, set_labels = setLabels, ax = ax)
plt.title('Venn Diagram')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我要做的是将计数(在本例中为 3000、3 和 5)移动到颜色与图中颜色匹配的图例中。不知道如何用 matplotlib_venn 做到这一点。
我正在使用 Matplotlib_venn 包制作一些表示三个不同集合重叠的维恩图(因此使用了 Venn3)。
当我使用plt.show()和创建维恩图时,显示在每个圆圈每个部分内部的数字是集合中元素满足重叠要求的次数。我明白了。
我的问题是:有没有一种方法可以显示每个圆圈中存在的集合元素,而不是显示这个基数?我想这对于大集合来说会变得非常混乱,但是你能用三个集合来做到这一点,每个集合都包含少于 5 个元素吗?如果是这样,我将如何做到这一点?
我正在使用matplotlib_venn.venn2函数在一个图中绘制四个不同的维恩图。
我对函数子集参数的输入是字符串集:
cse_set_ucb = set(['data science','algorithms', 'machine learning',...])
ece_set_ucb = set(['circuits', 'signals', 'machine learning',....])
v_ucb = venn2([cse_set_ucb,ece_set_ucb],set_labels=['CSE','ECE'],set_colors=['r','g'])
Run Code Online (Sandbox Code Playgroud)
v_ucla、v_ucsb 和 v_ucsd 也类似。
当前结果:
但是,为了使比较更直观,我想在维恩图中 显示百分比而不是设置大小。是否可以通过 venn2 中的某些功能来做到这一点?
例如,第一个情节将被替换为:
我现在能想到的唯一选择是以某种方式自己进行标准化,然后将子集大小输入到 venn2 函数中,而不是集合中,但我希望有一种更聪明的方法来做到这一点
我编写了以下代码来创建维恩图来显示 3 个集合的交集。我绘制的只是共同元素的数量。我想要的是打印真正的 A,B,C,... 在交叉点内不计算它们。有办法吗?
我的代码和输出:
set1 = set(['A', 'B', 'C', 'D'])
set2 = set(['B', 'C', 'D', 'E'])
set3 = set(['C', 'D',' E', 'F', 'G'])
v=venn3([set1, set2, set3], ('Set1', 'Set2', 'Set3'))
plt.show()
Run Code Online (Sandbox Code Playgroud)
我想要的是这样的:
我正在创建通过matplotlib_venn. 这是我正在制作的情节:

请注意右上角图中缺少的标题。这是因为每当我调用 时ax.set_title,它都会替换现有的子图标题。创建此图的代码是:
oadoi_colors = ['all', 'closed', 'closed + green', 'bronze', 'green', 'hybrid', 'gold']
collections = ['Combined', 'Crossref', 'Unpaywall', 'Web of Science']
figure, axes = matplotlib.pyplot.subplots(nrows=len(oadoi_colors), ncols=len(collections), figsize=(2.7 * len(collections), 2.7 * len(oadoi_colors)))
subplot_label_rectprops = {'facecolor': '#fef2e2', 'boxstyle': 'round'}
for (oadoi_color, collection), df in coverage_df.groupby(['oadoi_color', 'collection']):
i = oadoi_colors.index(oadoi_color)
j = collections.index(collection)
ax = axes[i, j]
venn_plotter(df, ax=ax)
if i == 0:
text = ax.set_title(collection, loc='center', y=1.1)
text.set_bbox(subplot_label_rectprops)
# Top-right subplot cannot titled twice: /sf/ask/2562164321/ …Run Code Online (Sandbox Code Playgroud) 这是一个样本维恩图:
from matplotlib import pyplot as plt
import numpy as np
from matplotlib_venn import venn3, venn3_circles
plt.figure(figsize=(4,4))
vd = venn3(subsets=(1, 1, 1, 1, 1, 1, 1), set_labels = ('A', 'B', 'C'))
plt.show()
Run Code Online (Sandbox Code Playgroud) 通过遵循matplotlib-venn README中的命令,我可以在示例中生成初始图.但是,当我更改维恩图(标签文本等)的设置时,我无法弄清楚如何重新绘制图形.运行:
%matplotlib inline
from matplotlib_venn import venn3
v = venn3([set1, set2, set3], ('Set1', 'Set2', 'Set3'))
Run Code Online (Sandbox Code Playgroud)
给出维恩图内联.然后我继续更改标签
v.get_label_by_id('100').set_text('Arbitrary1')
Run Code Online (Sandbox Code Playgroud)
但我不能重新绘制这个数字.我试过了
# from matplotlib import pyplot as plt
plt.plot()
plt.plot(v)
v
v()
Run Code Online (Sandbox Code Playgroud)
但我真的在黑暗中四处感受.我觉得我遗漏了一些非常基本的东西%matplotlib或matplotlib情节功能,但我还没能在网上找到答案.
如何在Jupyter中再次绘制这个数字?