Этого не должно быть.И этого не произойдет, если вы убедитесь, что ваш индекс - это действительные числа, а не строки.
Чтобы преобразовать ваш индекс в числа, используйте, например,
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](https://i.stack.imgur.com/pbq3P.png)