如何减少matplotlib图上显示的xticks数量?

时间:2018-06-06 00:56:36

标签: python pandas matplotlib

我正在绘制时间序列数据,我想在曲线中保持分辨率,但我希望在x轴上显示更少的年份。我已将'Year'列解析为日期,我已将该列放入数据框的索引中。我觉得应该很容易减少标签的频率,但我尝试的所有内容都只是使标签不准确。

DataFrame的格式为:

print(total_df.head())

         All ages  Age 18 or older
Year                           
1978     131.0            183.0
1979     133.0            185.0
1980     138.0            191.0
1981     153.0            211.0
1982     170.0            232.0

我一直在使用这段代码来制作我的情节。

with sns.axes_style("whitegrid"):
    fig, ax = plt.subplots(figsize=(10,7))
    ax.plot(total_df['All ages'])
    ax.plot(total_df['Age 18 or older'])
    ax.set_title('Total Imprisonment Rates (table: p16f01)')
    ax.set_xlabel('Year')
    ax.set_ylabel('People imprisoned (per 100k US population)')
    ax.set_xticklabels(total_df.index, rotation=70)
    ax.legend()
    ax.set_ylim([0, 1.1*max([total_df['All ages'].max(), 
                             total_df['Age 18 or older'].max()])])

哪个产生 total imprisonment plot

1 个答案:

答案 0 :(得分:1)

这不应该发生。如果你确定你的索引是实际数字而不是字符串,那就不会发生。

要将索引转换为数字,请使用例如

df.index = df.index.values.astype(int)

然后移除set_xticklabels行,因为如果您通过set_ticks设置滴答,这只会有意义。 这将确保matplotlib自动选择刻度线之间的有用间距。

完整示例:

import matplotlib.pyplot as plt
import numpy as np;np.random.seed(9)
import pandas as pd

inx = np.arange(1978,2017).astype(str)
a = np.cumsum(np.random.randn(len(inx),2), axis=0)+10
df = pd.DataFrame(a, index=inx, columns=list("AB"))

df.index = df.index.values.astype(int)

fig, ax = plt.subplots(figsize=(10,7))
ax.plot(df['A'])
ax.plot(df['B'])

ax.set_xlabel('YEAR')

ax.legend()
ax.set_ylim([0, 1.1*max([df['A'].max(), 
                         df['B'].max()])])

plt.show()

enter image description here