将Xticks频率设置为dataframe index

时间:2017-10-15 13:31:40

标签: python pandas matplotlib plot

我目前有一个数据框,其中包含从1990年到2014年(25行)的年份。我希望我的情节能够显示所有年份的X轴。我正在使用add_subplot,因为我打算在这个图中有4个图(所有图都有相同的X轴)。

创建数据框:

import pandas as pd
import numpy as np

index = np.arange(1990,2015,1)
columns = ['Total Population','Urban Population']

pop_plot = pd.DataFrame(index=index, columns=columns)
pop_plot = df_.fillna(0)

pop_plot['Total Population'] = np.arange(150,175,1)
pop_plot['Urban Population'] = np.arange(50,125,3)

我目前拥有的代码:

fig = plt.figure(figsize=(10,5))
ax1 = fig.add_subplot(2,2,1, xticklabels=pop_plot.index)
plt.subplot(2, 2, 1)

plt.plot(pop_plot)
legend = plt.legend(pop_plot, bbox_to_anchor=(0.1, 1, 0.8, .45), loc=3, ncol=1, mode='expand')
legend.get_frame().set_alpha(0)

ax1.set_xticks(range(len(pop_plot.index)))

这是我得到的情节:

Plot with ax1.set_xticks

当我评论set_xticks时,我得到以下情节:

#ax1.set_xticks(range(len(pop_plot.index)))

Regular plot

我尝试了几个我在这里找到的答案,但我没有取得多大成功。

提前致谢。

1 个答案:

答案 0 :(得分:1)

不清楚ax1.set_xticks(range(len(pop_plot.index)))应该用于什么。它会将刻度设置为数字0,1,2,3等,而您的绘图应该在1990年到2014年之间。

相反,您希望将滴答数设置为数据的数字:

ax1.set_xticks(pop_plot.index)

完成更正的示例:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

index = np.arange(1990,2015,1)
columns = ['Total Population','Urban Population']

pop_plot = pd.DataFrame(index=index, columns=columns)

pop_plot['Total Population'] = np.arange(150,175,1)
pop_plot['Urban Population'] = np.arange(50,125,3)


fig = plt.figure(figsize=(10,5))
ax1 = fig.add_subplot(2,2,1)

ax1.plot(pop_plot)
legend = ax1.legend(pop_plot, bbox_to_anchor=(0.1, 1, 0.8, .45), loc=3, ncol=1, mode='expand')
legend.get_frame().set_alpha(0)

ax1.set_xticks(pop_plot.index)
plt.show()