在matplotlib中的for循环中向子图添加唯一标题

时间:2019-10-15 13:44:11

标签: python pandas for-loop matplotlib subplot

我已经检查了SO上的其他答案,这些答案似乎并没有帮助我解决此问题。我已经从pandas df的一列创建了子图。我希望每个subplot在每个标题的结尾都有一个唯一的日期,这是我试图循环执行的。发生的情况是标题仅出现在最后一个图形上,而没有其他标题。为什么会这样?

area2011 = df_2011.groupby(['Area Id']).size()
area2012 = df_2012.groupby(['Area Id']).size()
area2013 = df_2013.groupby(['Area Id']).size()
area2014 = df_2014.groupby(['Area Id']).size()
area2015 = df_2015.groupby(['Area Id']).size()
area2016 = df_2016.groupby(['Area Id']).size()
area_list = [area2011, area2012, area2013, area2014, area2015, area2016]
fig, axes = plt.subplots(2, 3)
for i in range(2011, 2017):
    for d, ax in zip(area_list, axes.ravel()):
        plt.title(f'Area Id crimes in {i}')
        d.plot.bar(ax=ax, figsize=(15, 7))
        plt.tight_layout()

从第一个subplot到最后一个,我要制作:

"Area Id crimes in 2011"
   .
   .
   .
"Area Id crimes in 2016"

1 个答案:

答案 0 :(得分:1)

我认为发布答案更快。这样就可以了:

for i in range(2011, 2017):
    for d, ax in zip(area_list, axes.ravel()):
        plt.title(f'Area Id crimes in {i}')
        d.plot.bar(ax=ax, figsize=(15, 7))
        plt.tight_layout()

外部for循环在最后一次运行(i=2016)时会将所有内容设置为f'Area Id crimes in {i}',即'Area Id crimes in 2016'

for d, i in zip(area_list, range(6)):
    ax = axes.ravel()[i];
    ax.set_title(f'Area Id crimes in {i+2011}')
    d.plot.bar(ax=ax, figsize=(15, 7))
    plt.tight_layout()