如何使用matplotlib创建多个饼图

3
我有一个 Pandas DataFrame,看起来像这样:
Year    EventCode   CityName    EventCount
2015    10          Jakarta     12
2015    10          Yogjakarta  15
2015    10          Padang      27
...
2015    13          Jayapura    34 
2015    14          Jakarta     24
2015    14          Yogjaarta   15
...
2019    14          Jayapura    12  

我希望能够可视化每年按事件代码分组拥有最大EventCount的前5个城市(使用饼图)。
我该怎么做?

您可以使用subplot方法:https://matplotlib.org/gallery/lines_bars_and_markers/scatter_star_poly.html#sphx-glr-gallery-lines-bars-and-markers-scatter-star-poly-py - Thomas Schillaci
我能否自动迭代一个函数并将其可视化,而不需要手动在subplot中绘制它? - Pundun
如果你想绘制5个图表,可以使用 for i in range(1, 6): plot.subplot(f'51{i}') - Thomas Schillaci
2个回答

4
这可以通过使用pivot_table重新组织您的数据,并使用sort_valuessubplots参数的DataFrame.plot.pie方法来过滤顶级城市来实现。
# Pivot your data
df_piv = df.pivot_table(index='EventCode', columns='CityName',
                        values='EventCount', aggfunc='sum', fill_value=0)


# Get top 5 cities by total EventCount
plot_cities = df_piv.sum().sort_values(ascending=False).head(5).index

# Plot
df_piv.reindex(columns=plot_cities).plot.pie(subplots=True,
                                             figsize=(10, 7),
                                             layout=(-1, 3))

[输出]

在这里输入图片描述


2

Pandas支持自动将每一列绘制到子图中。因此,您需要将CityName作为索引,将EventCode作为列并进行绘制。

(df.sort_values('EventCount', ascending=False) # sort descending by `EventCount`  
   .groupby('EventCode', as_index=False)
   .head(5)                                    # get 5 most count within `EventCode`
   .pivot(index='CityName',                    # pivot for plot.pie
          columns='EventCode',
          values='EventCount'
         )
   .plot.pie(subplots=True,                    # plot with some options
             figsize=(10,6), 
             layout=(2,3))
)

输出:

在这里输入图像描述


注:该内容为HTML代码,暂无法翻译。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接