我想绘制属于某些组的变量。
假设我有 6 个变量,我想将它们分类到这 3 个组中并像维恩图一样绘制。我想将变量名称注释到三个气泡中。
在这个简单的例子中,我们可以说 1 个变量在第 1 组中,3 个变量在第 2 组中,2 个变量在第 3 组中。
谁能帮我举一个简单的例子来说明如何在 matplotlib 中做到这一点?
我想绘制属于某些组的变量。
假设我有 6 个变量,我想将它们分类到这 3 个组中并像维恩图一样绘制。我想将变量名称注释到三个气泡中。
在这个简单的例子中,我们可以说 1 个变量在第 1 组中,3 个变量在第 2 组中,2 个变量在第 3 组中。
谁能帮我举一个简单的例子来说明如何在 matplotlib 中做到这一点?
matplotlib 有一个漂亮的维恩图插件,名为matplotlib-venn。看起来它可以完全定制来做你正在寻找的东西,从圆圈的大小(与设置的大小成比例)到内部和外部标签。
使用网站上的示例代码给出如下图:
编辑:根据下面的评论,以下代码使用相同的库给出了与文本不重叠的圆圈:
import pylab as plt
from matplotlib_venn import venn3, venn3_circles
v = venn3(subsets=(1,1,0,1,0,0,0))
v.get_label_by_id('100').set_text('First')
v.get_label_by_id('010').set_text('Second')
v.get_label_by_id('001').set_text('Third')
plt.title("Not a Venn diagram")
plt.show()
给出图表:
在这里,您可以只传递数组并计算重叠。
import numpy as np
from matplotlib_venn import venn3
def venn_diagram(a, b, c, labels=['A', 'B', 'C']):
a = set(a)
b = set(b)
c = set(c)
only_a = len(a - b - c)
only_b = len(b - a - c)
only_c = len(c - a - b)
only_a_b = len(a & b - c)
only_a_c = len(a & c - b)
only_b_c = len(b & c - a)
a_b_c = len(a & b & c)
venn3(subsets=(only_a, only_b, only_a_b, only_c, only_a_c, only_b_c, a_b_c), set_labels=labels)
a, b, c = np.round(np.random.rand(3, 50000), 5)
venn_diagram(a, b, c)