Создайте пончик, используя диаграмму p ie с пользовательскими метками - PullRequest
0 голосов
/ 23 января 2020

Я работаю с финансовыми данными и намереваюсь выяснить, как создать вложенную диаграмму p ie для моих данных. В частности, я отфильтровал данные об экспорте и импорте товаров и создал для них вложенный график. Я сделал р ie диаграмму для каждого, я не могу получить правильную вложенную диаграмму p ie или пончик для данных. Я просмотрел возможный пост на SO, но не нашел подсказки, как получить мой сюжет.

мой текущий вывод :

import pandas as pd
from matplotlib import pyplot as plt

df5=df_from_gist_exp.groupby(['cty_ptn'])['qty1'].sum().nlargest(10)
df6=df_from_gist_imp.groupby(['cty_ptn'])['qty1'].sum().nlargest(10)
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.pie(df5, labels=df5.index, autopct='%1.0f%%', radius=1)
ax2.pie(df6, labels=df6.index, autopct='%1.0f%%', radius=1)
plt.axis('equal')
plt.tight_layout()
plt.show()

текущий график :

Я получил этот график после запуска вышеуказанного решения:

enter image description here

желаемый участок

на самом деле я хочу визуализировать эту диаграмму p ie или пончик, используя те же данные:

expected pie chart

Как я могу получить этот сюжет? Любой трюк, чтобы это произошло? Спасибо

1 Ответ

2 голосов
/ 24 января 2020

Я только что сделал минимальный код для достижения того, что вы хотели:

import matplotlib.pyplot as plt
import numpy as np

# Pie chart, where the slices will be ordered and plotted counter-clockwise:
lbls = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]

# Intended to serve something like a global variable
class MyClass:
    i = -1

def func(pct, labels, vals):
    MyClass.i +=1
    # Returns absolute value against the default percentage
    # absolute = int(pct/100.*np.sum(vals))
    # Combine labels and values
    return "{:s}\n{:.0f} %".format(labels[MyClass.i], pct)


fig1, ax1 = plt.subplots()
# Pie wedgeprops with width being the donut thickness
ax1.pie(sizes, wedgeprops=dict(width=0.7), autopct=lambda pct: func(pct, lbls, sizes),
        shadow=True, startangle=90)
sumstr = 'Total = '+str(np.sum(sizes))
# String on the donut center
ax1.text(0., 0., sumstr, horizontalalignment='center', verticalalignment='center')
ax1.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.

plt.show()

Это дает следующий график:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...