1

我使用以下代码绘制维恩图。问题是当一组是另一组的子集时,代码不起作用(见图)。当一组是另一组的子集时,如何更改以下代码以使其工作?在这种情况下,我希望红色圆圈在绿色圆圈内(颜色可能应该与重叠区域的颜色相同,而不是红色)。

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()

在此处输入图像描述

4

1 回答 1

1

您可以定义sets['10'] = 0, 以使红色部分(没有设置 2 的设置 1)为空。为防止空集出现在图例中,请相应地对图例调用中的句柄和标签进行切片: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()

于 2020-03-31T15:42:41.370 回答