我使用matplotlib绘制一些财务数据。但是,在默认配置中,matplotlib会插入间隙来代替丢失的数据。文档建议使用date index formatter来解决此问题。
但是,可以在页面上提供的示例中看到:
如何在避免数据间隙的同时保留此默认行为?
修改
示例代码,来自文档,顶部有所需的刻度。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib.cbook as cbook
import matplotlib.ticker as ticker
datafile = cbook.get_sample_data('aapl.csv', asfileobj=False)
print 'loading', datafile
r = mlab.csv2rec(datafile)
r.sort()
r = r[-30:] # get the last 30 days
# first we'll do it the default way, with gaps on weekends
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(r.date, r.adj_close, 'o-')
fig.autofmt_xdate()
# next we'll write a custom formatter
N = len(r)
ind = np.arange(N) # the evenly spaced plot indices
def format_date(x, pos=None):
thisind = np.clip(int(x+0.5), 0, N-1)
return r.date[thisind].strftime('%Y-%m-%d')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(ind, r.adj_close, 'o-')
ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
fig.autofmt_xdate()
plt.show()
答案 0 :(得分:1)
好吧,我会回答简单的部分:要Sept 03 2008
而不是2008-09-03
使用strftime('%b %d %Y')
:
def format_date(x, pos=None):
thisind = np.clip(int(x+0.5), 0, N-1)
result = r.date[thisind].strftime('%b %d %Y')
return result
PS。 r.date
中的最后一个日期是Oct 14 2008
,因此我认为为其添加刻度标记并不是一件坏事。你确定你不想要吗?