Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用matplotlib创建多个饼图_Python_Pandas_Matplotlib_Data Visualization_Pie Chart - Fatal编程技术网

Python 如何使用matplotlib创建多个饼图

Python 如何使用matplotlib创建多个饼图,python,pandas,matplotlib,data-visualization,pie-chart,Python,Pandas,Matplotlib,Data Visualization,Pie Chart,我有一个熊猫数据框看起来像这样 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

我有一个熊猫数据框看起来像这样

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  
我想想象一下每年事件数最多的前5个城市(用饼图),按事件代码分组


我该怎么做

熊猫支持自动将每列打印到子图中。因此,您要选择
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))
)
输出:


这可以通过以下方法实现:使用重构数据、使用筛选顶级城市以及使用
子地块的方法
参数:

# 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))
[外]


您可以使用
子绘图
方法:我是否可以自动迭代函数以可视化它,而无需在
子绘图
中手动绘制它?如果您想要绘制5个图表,您可以对范围(1,6)中的i使用
:plot.subplot(f'51{i}')