在matplotlib中绘制面积比例双向和三向venn图的函数。
matplotlib-venn的Python项目详细描述
绘制面积加权二、三圆文氏图的程序。
安装
安装包的最简单方法是通过easy_install或 pip:
$ easy_install matplotlib-venn
依赖关系
- numpy,
- scipy,
- matplotlib。
用法
包提供四个主要功能:venn2, venn2_circles、venn3和venn3_circles。
函数venn2和venn2_circles只接受它们 必需参数子集大小的3元素列表(Ab, aB, AB), 例如:
venn2(subsets = (3, 2, 1))
并画出一个两个圆的区域区域文氏图。在 特定的例子,对应于子集A and not B的区域在面积上比区域大三倍, 对应于子集A and B。或者,你可以简单地 请提供两个set或Counter(即多个集合)对象的列表(0.7版中的新对象)。 例如:
venn2([set(['A', 'B', 'C', 'D']), set(['D', 'E', 'F'])])
类似地,函数venn3和venn3_circles采用 子集大小(Abc, aBc, ABc, abC, AbC, aBC, ABC)的7元素列表,并绘制一个三圆区域加权venn 图表。或者,您可以提供三个set或Counter对象的列表 (而不是计算所有7个子集的大小)。
函数venn2_circles和venn3_circles只绘制 圆,而函数venn2和venn3则绘制 图表作为彩色补丁的集合,用文本注释 标签。此外(版本0.7+),函数venn2_unweighted和 venn3_unweighted绘制不带区域权重的维恩图。
注意,对于三圆维恩图,它不是一般的 可能实现所需集合之间的精确对应 但是在大多数情况下,图片仍然是 提供一个像样的指示。
函数venn2_circles和venn3_circles返回可以进一步优化的matplotlib.patch.Circle对象列表 你喜欢的。函数venn2和venn3返回类VennDiagram的对象, 它允许访问组成修补程序、文本元素和 版本0.7)关于中心和半径的信息 圈子。
基本示例:
from matplotlib_venn import venn2 venn2(subsets = (3, 2, 1))
对于三个圆的情况:
from matplotlib_venn import venn3 venn3(subsets = (1, 1, 1, 2, 1, 2, 2), set_labels = ('Set1', 'Set2', 'Set3'))
更详细的示例:
from matplotlib import pyplot as plt import numpy as np from matplotlib_venn import venn3, venn3_circles plt.figure(figsize=(4,4)) v = venn3(subsets=(1, 1, 1, 1, 1, 1, 1), set_labels = ('A', 'B', 'C')) v.get_patch_by_id('100').set_alpha(1.0) v.get_patch_by_id('100').set_color('white') v.get_label_by_id('100').set_text('Unknown') v.get_label_by_id('A').set_text('Set "A"') c = venn3_circles(subsets=(1, 1, 1, 1, 1, 1, 1), linestyle='dashed') c[0].set_lw(1.0) c[0].set_ls('dotted') plt.title("Sample Venn diagram") plt.annotate('Unknown set', xy=v.get_label_by_id('100').get_position() - np.array([0, 0.05]), xytext=(-70,-70), ha='center', textcoords='offset points', bbox=dict(boxstyle='round,pad=0.5', fc='gray', alpha=0.1), arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0.5',color='gray')) plt.show()
具有多个子块的示例(0.6版中的新功能):
from matplotlib_venn import venn2, venn2_circles figure, axes = plt.subplots(2, 2) venn2(subsets={'10': 1, '01': 1, '11': 1}, set_labels = ('A', 'B'), ax=axes[0][0]) venn2_circles((1, 2, 3), ax=axes[0][1]) venn3(subsets=(1, 1, 1, 1, 1, 1, 1), set_labels = ('A', 'B', 'C'), ax=axes[1][0]) venn3_circles({'001': 10, '100': 20, '010': 21, '110': 13, '011': 14}, ax=axes[1][1]) plt.show()
也许最常见的用例是生成给定的venn图 三组对象:
set1 = set(['A', 'B', 'C', 'D']) set2 = set(['B', 'C', 'D', 'E']) set3 = set(['C', 'D',' E', 'F', 'G']) venn3([set1, set2, set3], ('Set1', 'Set2', 'Set3')) plt.show()
问题
- 如果您在StackOverflow提出问题并标记为matplotlib-venn,则很有可能从这个包的维护者那里得到答案。
另请参见
在github上报告问题并提交修复: https://github.com/konstantint/matplotlib-venn
查看DEVELOPER-README.rst以获取与开发相关的注释。
绘制维恩图的一些替代方法(如 2012年10月)在博客中评论: http://fouryears.eu/2012/10/13/venn-diagrams-in-python/
matplotlib-subsets包 将集合的层次结构可视化为矩形树。
matplotlib_venn_wordcloud包 将文氏图与单词云相结合,得到了一个非常惊人(有趣)的结果。