Добавьте легенды к вложенным круговым диаграммам - PullRequest
2 голосов
/ 20 марта 2019

Я хочу добавить легенду во внутреннюю круговую диаграмму для вложенной круговой диаграммы:

import matplotlib.pyplot as plt

# Make data: I have 3 groups and 7 subgroups
group_names=['groupA', 'groupB', 'groupC']
group_size=[12,11,30]
subgroup_names=['A.1', 'A.2', 'A.3', 'B.1', 'B.2', 'C.1', 'C.2', 'C.3', 
'C.4', 'C.5']
subgroup_size=[4,3,5,6,5,10,5,5,4,6]

# Create colors
a, b, c=[plt.cm.Blues, plt.cm.Reds, plt.cm.Greens]

# First Ring (outside)
fig, ax = plt.subplots()
ax.axis('equal')
mypie, _ = ax.pie(group_size, radius=1.3, labels=group_names, colors= 
[a(0.6), b(0.6), c(0.6)] )
plt.setp( mypie, width=0.3, edgecolor='white')

# Second Ring (Inside)
mypie2, _ = ax.pie(subgroup_size, radius=1.3-0.3, 
labels=subgroup_names, labeldistance=0.7, colors=[a(0.5), a(0.4), 
a(0.3), b(0.5), b(0.4), c(0.6), c(0.5), c(0.4), c(0.3), c(0.2)])
plt.setp( mypie2, width=0.4, edgecolor='white')
plt.margins(0,0)

subgroup_names_legs=['A.1:a1desc', 'A.2:a2desc', 'A.3:a3desc', 
'B.1:b1desc', 'B.2:b2desc', 'C.1:c1desc', 'C.2:c2desc', 'C.3:c3desc', 
'C.4:c4desc', 'C.5:c5desc']
plt.legend(subgroup_names_legs,loc='best')

# show it
plt.show()

, чтобы получить такой результат:

enter image description here

Я хочу правильно сослаться на цвета в легенде (например, A1, A2 и A3 - это разные виды синего цвета и т. Д.)

Кроме того, как отобразить легенду втак, чтобы не перекрывать график?

1 Ответ

2 голосов
/ 20 марта 2019

Проблема заключается в том, что сначала вы назначаете легенды, используя labels=subgroup_names, а затем переназначаете их, используя plt.legend(subgroup_names_legs,loc='best'). Таким образом, вы перезаписываете существующие значения и, следовательно, разрушаете порядок. Вот почему вы видите несопоставимые цвета.

Чтобы поле легенды не перекрывалось с рисунком, вы можете указать его местоположение как loc=(0.9, 0.1)

Чтобы избавиться от легенд на внешней круговой диаграмме, вы можете взять маркеры и метки легенды, а затем исключить первые три записи, чтобы у вас были только легенды для внутренней круговой диаграммы

# First Ring (outside)
fig, ax = plt.subplots()
ax.axis('equal')
mypie, _ = ax.pie(group_size, radius=1.3, labels=group_names, colors= 
[a(0.6), b(0.6), c(0.6)] )
plt.setp( mypie, width=0.3, edgecolor='white')

# Second Ring (Inside)
mypie2, _ = ax.pie(subgroup_size, radius=1.3-0.3, 
labels=subgroup_names, labeldistance=0.7, colors=[a(0.5), a(0.4), 
a(0.3), b(0.5), b(0.4), c(0.6), c(0.5), c(0.4), c(0.3), c(0.2)])
plt.setp( mypie2, width=0.4, edgecolor='white')
plt.margins(0,0)

plt.legend(loc=(0.9, 0.1))
handles, labels = ax.get_legend_handles_labels()

ax.legend(handles[3:], subgroup_names_legs, loc=(0.9, 0.1))
plt.show()

enter image description here

...