Участок пончика в Matplotlib: Как включить в пончик как числовые значения, например, процент, так и текст, например, источники - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь сгенерировать кольцевую диаграмму для данных о смеси энергии ( Energy_Mix список), которая содержит как источники энергии ( Sources список), так и соответствующие данные генерации ( данные список).У меня есть код Python, который генерирует сюжет пончика, но текст, связанный с источниками энергии, находится за пределами пончика.Я хотел бы поместить их выше соответствующего процента внутри пончика, как в этом примере 1 .Кроме того, для процентов ниже 5%, я хотел бы поместить соответствующие уровни вне пончика, как в случае нефть и Ядерное в примере:

.

import matplotlib.pyplot as plt
import numpy as np

def pie(ax, data, Sources, **kwargs):
    def formatter(pct):
        absolute = int(pct/100.*np.sum(data))
        return "\n{:.1f}%".format(pct, absolute)
    wedges, _, labels = ax.pie(data, labels=Sources, autopct=formatter, labeldistance=1.05, **kwargs)
    return wedges

fig, ax = plt.subplots()
ax.axis('equal')

width = 0.34

Energy_Mix = ["93.87365458 Wind", "97.59019256 Solar", "173.2890939 Hydro", "184.7893942 Gas", "172.69898 Coal", "51.85258076 Nuclear", "23.60333269 Geo", "2.965375675 Biomass", "0.086382324 Other"]


data = [float(x.split()[0]) for x in Energy_Mix]
Sources = [x.split()[-1] for x in Energy_Mix]

cmap = plt.get_cmap('tab20')
colorsSet = [cmap(5), cmap(4), cmap(0), cmap(9), cmap(1), cmap(3), cmap(6), cmap(10), cmap(2)]

kwargs = dict(colors=colorsSet, startangle=90)


inside = pie(ax, data, Sources,  radius=1-width,
             pctdistance=1 - (width/2) / (1-width), **kwargs)


plt.setp(inside , width=width, edgecolor='none')



kwargs = dict(size=13, color='black', va='center', fontweight='bold')
ax.text(0, 0, '2024\n800.7 GWh', ha='center',
        bbox=dict(boxstyle='round', facecolor='none', edgecolor='none'),
        **kwargs)

plt.show()

fig.savefig("EnergyMixPlot.pdf", bbox_inches='tight')
...