当一组是另一组的子集时,如何在 python 中为两组绘制维恩图?
How to plot Venn diagram in python for two sets when one set is a subset of another?
我使用以下代码绘制维恩图。问题是当一组是另一组的子集时代码不起作用(见图)。当一组是另一组的子集时,如何更改以下代码以使其工作?在这种情况下,我希望红色圆圈在绿色圆圈内(颜色可能应该与重叠区域的颜色相同而不是红色)。
sets = Counter()
sets['01'] = 10
sets['11'] = 5
sets['10'] = 5
setLabels = ['Set 1', 'set 2']
plt.figure()
ax = plt.gca()
v = venn2(subsets = sets, set_labels = setLabels, ax = ax)
h, l = [],[]
for i in sets:
# remove label by setting them to empty string:
v.get_label_by_id(i).set_text("")
# append patch to handles list
h.append(v.get_patch_by_id(i))
# append count to labels list
l.append(sets[i])
#create legend from handles and labels
ax.legend(handles=h, labels=l, title="Numbers")
plt.title("venn_test")
plt.savefig("test_venn.png")
pdb.set_trace()
您可以定义sets['10'] = 0
,使红色部分(第1组没有第2组)为空。为防止空集出现在图例中,请相应地对图例调用中的句柄和标签进行切片:ax.legend(handles=h[0:2], labels=l[0:2], title="Numbers")
所以把代码改成这样:
sets = Counter()
sets['01'] = 10
sets['11'] = 5
sets['10'] = 0 # set 1 without set 2 is empty
setLabels = ['Set 1', 'set 2']
plt.figure()
ax = plt.gca()
v = venn2(subsets = sets, set_labels = setLabels, ax = ax)
h, l = [],[]
for i in sets:
# remove label by setting them to empty string:
v.get_label_by_id(i).set_text("")
# append patch to handles list
h.append(v.get_patch_by_id(i))
# append count to labels list
l.append(sets[i])
#create legend from handles and labels, without the empty part
ax.legend(handles=h[0:2], labels=l[0:2], title="Numbers")
plt.title("venn_test")
plt.savefig("test_venn.png")
pdb.set_trace()
我使用以下代码绘制维恩图。问题是当一组是另一组的子集时代码不起作用(见图)。当一组是另一组的子集时,如何更改以下代码以使其工作?在这种情况下,我希望红色圆圈在绿色圆圈内(颜色可能应该与重叠区域的颜色相同而不是红色)。
sets = Counter()
sets['01'] = 10
sets['11'] = 5
sets['10'] = 5
setLabels = ['Set 1', 'set 2']
plt.figure()
ax = plt.gca()
v = venn2(subsets = sets, set_labels = setLabels, ax = ax)
h, l = [],[]
for i in sets:
# remove label by setting them to empty string:
v.get_label_by_id(i).set_text("")
# append patch to handles list
h.append(v.get_patch_by_id(i))
# append count to labels list
l.append(sets[i])
#create legend from handles and labels
ax.legend(handles=h, labels=l, title="Numbers")
plt.title("venn_test")
plt.savefig("test_venn.png")
pdb.set_trace()
您可以定义sets['10'] = 0
,使红色部分(第1组没有第2组)为空。为防止空集出现在图例中,请相应地对图例调用中的句柄和标签进行切片:ax.legend(handles=h[0:2], labels=l[0:2], title="Numbers")
所以把代码改成这样:
sets = Counter()
sets['01'] = 10
sets['11'] = 5
sets['10'] = 0 # set 1 without set 2 is empty
setLabels = ['Set 1', 'set 2']
plt.figure()
ax = plt.gca()
v = venn2(subsets = sets, set_labels = setLabels, ax = ax)
h, l = [],[]
for i in sets:
# remove label by setting them to empty string:
v.get_label_by_id(i).set_text("")
# append patch to handles list
h.append(v.get_patch_by_id(i))
# append count to labels list
l.append(sets[i])
#create legend from handles and labels, without the empty part
ax.legend(handles=h[0:2], labels=l[0:2], title="Numbers")
plt.title("venn_test")
plt.savefig("test_venn.png")
pdb.set_trace()