遍历Pandas DataFrame并绘制每列

时间:2019-05-21 22:16:43

标签: python pandas matplotlib

我想创建一个函数或for循环,将为DataFrame的每一列显示排序的水平条形图。可以在下面看到一列代码的示例。 plt.savefig()很不错,但不是必需的。

frame ['Population-current year']是DataFrame中的列之一。我似乎无法在语法上为循环制定必要的结构。

DataFrame标头:

地名人口当前年份 圣达菲82980.0
纳什维尔·戴维森654187.0
桑迪亚公园72.0
石山6209.0
阿什维尔89318.0

地名Pct人口变化,2010-当前年\ 圣达菲0.2277
纳什维尔·戴维森0.1130
桑迪亚公园0.0286
石山0.0362
阿什维尔0.0896

地名人口中位年龄住房中位年龄\ 圣达菲42.8 34.0
纳什维尔·戴维森34.1 38.0
桑迪亚公园60.2 24.0
石山38.8 38.0
阿什维尔38.6 44.0

预先感谢。

ax = (frame['Population-current year']/1000).sort_values().plot(kind='barh', figsize=(8, 10), color='#86bf91', zorder=2, width=0.85)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['bottom'].set_visible(False)

ax.tick_params(axis="both", which="both", bottom="off", top="off", labelbottom="on", left="off", right="off", labelleft="on")

vals = ax.get_xticks()
for tick in vals:
    ax.axvline(x=tick, linestyle='dashed', alpha=0.4, color='#eeeeee', zorder=1)
ax.set_title("Population - 2017 (1000s)", weight='bold', size=12)
ax.set_xlabel("Population - 2017 (1000s)", labelpad=20, weight='bold', size=12)
ax.set_ylabel("City", labelpad=20, weight='bold', size=12)
ax.xaxis.set_major_formatter(StrMethodFormatter('{x:,g}'))

plt.savefig('pop_chart.png')

0 个答案:

没有答案