Отсутствующие метки в круговой диаграмме matplotlib - PullRequest
1 голос
/ 06 марта 2019

Я пытаюсь построить круговую диаграмму, используя Python 3 Matplotlib v2.2.2-4build1 в Ubuntu 18.10. Кажется, все в порядке, кроме ярлыков - они отсутствуют. Пытался добавить его в соответствии с официальной документацией (https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pie.html), пытался использовать пример из Интернета (https://pythonspot.com/matplotlib-pie-chart/) - тот же результат, без меток.

Вот упрощенная версия моего кода:

import numpy as np
import matplotlib.pyplot as plt
import sys

headers = ['a', 'b', 'c', 'd', 'e']
values = [5, 4, 3, 2, 1]
sum = sum(values)
labels = []
for v in values:
    labels.append('{:.1f}%'.format(100 * v / sum))
fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal"))
wedges, texts = ax.pie(values, labels=labels, textprops=dict(color="w"))
plt.show()

Вот что я вижу - без ярлыков:

Pie chart with no labels

Пытался использовать кортеж вместо списка - тоже самое.

Кто-нибудь может мне помочь?

Ответы [ 3 ]

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

Возможно, вы захотите сделать цвет ваших ярлыков не белым на белом фоне:)

Также использование суммы в качестве имени переменной перезаписывает функцию, так что вам лучше выбрать что-то другое.

import numpy as np
import matplotlib.pyplot as plt
import sys

headers = ['a', 'b', 'c', 'd', 'e']
values = [5, 4, 3, 2, 1]
sumT = sum(values)
labels = []
for v in values:
    labels.append('{:.1f}%'.format(100 * v / sumT))
fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal"))
wedges, texts = ax.pie(values, labels=labels, textprops=dict(color="k"))
plt.show()

Или, если вы хотите, чтобы этикетки были внутри:

import numpy as np
import matplotlib.pyplot as plt
import sys

def func(pct, allvals):
    absolute = int(pct/100.*sum(allvals))
    return "{:.1f}%)".format(pct)

headers = ['a', 'b', 'c', 'd', 'e']
values = [5, 4, 3, 2, 1]
sumT = sum(values)
labels = []
for v in values:
    labels.append('{:.1f}%'.format(100 * v / sumT))
fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal"))
wedges, texts = ax.pie(values, autopct=lambda pct: func(pct, 
values), textprops=dict(color="w"))
plt.show()
1 голос
/ 06 марта 2019
import numpy as np
import matplotlib.pyplot as plt
import sys

headers = ['a', 'b', 'c', 'd', 'e']
values = [5, 4, 3, 2, 1]
colors=['yellow','blue','red','pink','green']

plt.pie(values,labels=headers,
        colors=colors,autopct='%1.2f%%',
        shadow=True,startangle=90)
plt.title('pie chart')
plt.show()

Output

0 голосов
/ 06 марта 2019

Добавление оператора plt.legend () до того, как plt.show () выполнит эту работу.

import numpy as np
import matplotlib.pyplot as plt
import sys

headers = ['a', 'b', 'c', 'd', 'e']
values = [5, 4, 3, 2, 1]
labels = []
for v in values:
    labels.append('{:.1f}%'.format(100 * v / sum))
fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal"))
wedges, texts = ax.pie(values, labels=labels, textprops=dict(color="w"))
plt.legend()
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...