我正在尝试完全显示我的图表的刻度标签,但是尽管付出了努力,但我没有得到理想的结果。
如果我只使用autofmt_xdate()
,则会正确显示日期,但不会对每个数据点进行绘制;但是,如果我通过将datetime
个对象传递给xtick()
来强制显示我的x刻度标签,它似乎只显示年份。
fig1 = plt.figure(1)
# x is a list of datetime objects
plt.title('Portfolio Instruments')
plt.subplot(111)
plt.plot(x, y)
plt.xticks(fontsize='small')
plt.yticks([i * 5 for i in range(0, 15)])
fig1.autofmt_xdate()
plt.show()
我的错误在哪里?我找不到了。
问题
如何绘制x的所有数据点并对其进行格式化以显示我使用autofmt_xdate()
传递图形的整个日期时间对象?
我有一个日期时间对象列表,我想将其作为我的情节的x值传递。
答案 0 :(得分:1)
我很确定我有类似的问题,我解决它的方法是使用以下代码:
def formatFig():
date_formatter = DateFormatter('%H:%M:%S') #change the format here to whatever you like
plt.gcf().autofmt_xdate()
ax = plt.gca()
ax.xaxis.set_major_formatter(date_formatter)
max_xticks = 10 # sets the number of x ticks shown. Change this to number of data points you have
xloc = plt.MaxNLocator(max_xticks)
ax.xaxis.set_major_locator(xloc)
def makeFig():
plt.plot(xList,yList,color='blue')
formatFig()
makeFig()
plt.show(block=True)
这是一个非常简单的示例,但您应该能够转移formatfig()
部分以在代码中使用。
答案 1 :(得分:1)
将您想要的日期传递到xticks
,然后使用plt.gca().xaxis.set_major_formatter
设置x轴的主格式化程序:
然后,您可以使用DateFormatter
from matplotlib.dates
,并使用strftime
格式字符串来获取问题中的格式:
import matplotlib.dates as dates
fig1 = plt.figure(1)
# x is a list of datetime objects
plt.title('Portfolio Instruments')
plt.subplot(111)
plt.plot(x, y)
plt.xticks(x,fontsize='small')
plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%b %d %Y'))
plt.yticks([i * 5 for i in range(0, 15)])
fig1.autofmt_xdate()
plt.show()
注意:我使用下面的代码为上面的图创建了数据,因此x
只是一个月中每个工作日的datetime
个对象列表(即没有周末)。
import numpy as np
from datetime import datetime,timedelta
start = datetime(2016, 1, 1)
end = datetime(2016, 2, 1)
delta = timedelta(days=1)
d = start
weekend = set([5, 6])
x = []
while d <= end:
if d.weekday() not in weekend:
x.append(d)
d += delta
y = np.random.rand(len(x))*70