如何使用matplotlib在没有重叠的情况下调整轴上的月份?

时间:2018-01-05 00:10:47

标签: python matplotlib

我正在尝试使用matplotlib绘制以下数据。

      Month    A     B       C
0   2014/06    41    17      3
1   2014/07    48    11      7
2   2014/08    58    20      4
3   2014/09    43    16      6
4   2014/10    73    13      7
5   2014/11    69    22     16
6   2014/12    65    34      9
7   2015/01    69    27     12

我有以下代码:

x = np.arange(len(df["Month"].values))
y1=df["A"].values.astype(int)
y2=df["B"].values.astype(int)
y3=df["C"].values.astype(int)

my_xticks = df["Month"].values
plt.xticks(x, my_xticks)
plt.plot(x,y1)
plt.plot(x,y2)
plt.plot(x,y3)
plt.show()

问题是月份在x轴上相互重叠。我可以通过Python自动调整吗?我不仅需要旋转,还会自动忽略几个月。否则,它太拥挤了。

1 个答案:

答案 0 :(得分:1)

Matplotlib有一个函数可以在日期时自动格式化x轴 - autofmt_xdate。这会自动旋转标签,并定位刻度。可以通过将参数传递给此函数来更改它们。当然,它们也可以手动更改,但这需要(稍微)更多的努力。

使用切片表示法[::2]

,您可以轻松减少每个第二个元素采样所显示的日期数
# Code here that creates a list of dates called list_of_dates...
print (list_of_dates)
# ['2016-08', '2016-09', '2016-10', '2016-11', '2016-12', '2017-01',
# '2017-02', '2017-03', '2017-04', '2017-05', '2017-06', '2017-07',
# '2017-08', '2017-09', '2017-10', '2017-11', '2017-12', '2018-01']
x = np.arange(0, len(list_of_dates), 1)

plt.xticks(x[::2], list_of_dates[::2])
plt.plot(x, np.random.randn(len(list_of_dates)))

# plt.gcf() means "get current figure"
plt.gcf().autofmt_xdate(ha="center")

plt.show()

给出了:

enter image description here