我的matplotlib pyplot
有太多xticks
- 它目前显示每年和每月的15年,例如“2001-01”,但我只希望x轴显示年份(例如2001年)。
输出将是折线图,其中x轴显示日期,y轴显示销售和租金价格。
# Defining the variables
ts1 = prices['Month'] # eg. "2001-01" and so on
ts2 = prices['Sale']
ts3 = prices['Rent']
# Reading '2001-01' as year and month
ts1 = [dt.datetime.strptime(d,'%Y-%m').date() for d in ts1]
plt.figure(figsize=(13, 9))
# Below is where it goes wrong. I don't know how to set xticks to show each year.
plt.xticks(ts1, rotation='vertical')
plt.xlabel('Year')
plt.ylabel('Price')
plt.plot(ts1, ts2, 'r-', ts1, ts3, 'b.-')
plt.gcf().autofmt_xdate()
plt.show()
答案 0 :(得分:3)
您可以使用plt.xticks
执行此操作。
作为一个例子,这里我设置了xticks频率来显示每三个索引。在你的情况下,你可能希望每12个指数这样做。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
y = np.random.randn(10)
plt.plot(x,y)
plt.xticks(np.arange(min(x), max(x)+1, 3))
plt.show()
在您的情况下,由于您正在使用日期,您可以使用ts1[0::12]
之类的内容替换上面第二行到最后一行的参数,该ts1
将从np.arange(0, len(dates), 12)
或{{1}中选择每个第12个元素这将选择与您要显示的刻度相对应的每个第12个索引。
答案 1 :(得分:3)
尝试完全删除plt.xticks
函数调用。然后,matplotlib将使用默认的AutoDateLocator
函数来查找最佳的刻度位置。
或者,如果默认值包含您不想要的几个月,那么您可以使用matplotlib.dates.YearLocator
来强制刻度仅为年。
您可以在快速示例中设置如下所示的定位器:
import matplotlib.pyplot as plt
import matplotlib.dates as mdate
import numpy as np
import datetime as dt
x = [dt.datetime.utcnow() + dt.timedelta(days=i) for i in range(1000)]
y = range(len(x))
plt.plot(x, y)
locator = mdate.YearLocator()
plt.gca().xaxis.set_major_locator(locator)
plt.gcf().autofmt_xdate()
plt.show()