【发布时间】:2020-03-30 22:58:56
【问题描述】:
我使用以下代码绘制维恩图。问题是当一组是另一组的子集时,代码不起作用(见图)。当一组是另一组的子集时,如何更改以下代码以使其工作?在这种情况下,我希望红色圆圈在绿色圆圈内(颜色可能应该与重叠区域的颜色相同,而不是红色)。
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") -
这很好,谢谢!
-
很高兴我能帮上忙。我将把它放在下面作为将来参考的答案。
标签: matplotlib matplotlib-venn