Диаграмма Венна Matplotlib с легендой

Я использую пакеты matplotlib-venn для рисования диаграмм Венна в python. Этот пакет прекрасно работает для рисования диаграмм Венна с двумя или тремя наборами. Однако, когда один из наборов намного больше других, подсчеты в меньших кругах могут сблизиться или перекрыться. Вот пример.

from collections import Counter
import matplotlib.pyplot as plt
from matplotlib_venn import venn2, venn3

sets = Counter()
sets['01'] = 3000
sets['11'] = 3
sets['10']  = 5
setLabels = ['set1', 'set2']

plt.figure()
ax = plt.gca()
v = venn2(subsets = sets, set_labels = setLabels, ax = ax)
plt.title('Venn Diagram')
plt.show()

введите здесь описание изображения

Что я хочу сделать, так это переместить счетчики (в данном случае 3000, 3 и 5) в легенду с цветами, соответствующими цветам на диаграмме. Не знал, как это сделать с помощью matplotlib_venn.


person COM    schedule 14.09.2017    source источник


Ответы (1)


Вы можете заменить метки для диаграммы Венна пустыми строками и вместо этого создать легенду из патчей Венна и соответствующих счетчиков следующим образом:

from collections import Counter
import matplotlib.pyplot as plt
from matplotlib_venn import venn2, venn3

sets = Counter()
sets['01'] = 3000
sets['11'] = 3
sets['10']  = 5
setLabels = ['set1', 'set2']

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="counts")

plt.title('Venn Diagram')
plt.show()

введите описание изображения здесь

person ImportanceOfBeingErnest    schedule 14.09.2017