<p><strong>添加到@SinanKurmus对我的第一个问题的回答:</strong></p>
<h2>解决方案1:</h2>
<p>可以使用matplotlib的方法,即<a href="https://matplotlib.org/3.1.3/api/dates_api.html?highlight=drange#matplotlib.dates.drange" rel="nofollow noreferrer">drange</a>和<a href="https://matplotlib.org/3.1.3/api/dates_api.html?highlight=drange#matplotlib.dates.num2date" rel="nofollow noreferrer">num2date</a>以及python,获得给定数据的整个历史的具有每日间隔的时间轴。这里可以避免使用熊猫</p>
<p>首先,将时间轴的开始和结束日期表示为python datetime对象。注意,您需要在结束日期后再添加一天,否则将不包括上一个日期的数据。接下来,使用python的<code>datetime.timedelta</code>对象使用1天作为时间间隔。接下来,将它们提供给将返回NumPy数组的<code>matplotlib.date.drange</code>方法。Matplotlib的num2date方法依次将其转换回python datetime对象</p>
<pre><code>def get_time_axis( data ):
start = datetime.strptime(min(data.values()), "%Y-%m-%d")
end = datetime.strptime(max(data.values()), "%Y-%m-%d") + timedelta(days=1)
delta = timedelta(days=1)
time_axis_md = mdates.drange( start, end, delta )
time_axis_py = mdates.num2date( time_axis_md, tz=None ) # Add tz when required
return time_axis_py
</code></pre>
<h2>解决方案2:</h2>
<p>显然,Matplotlib还有一个关于<a href="https://matplotlib.org/3.1.3/faq/howto_faq.html?highlight=faq%20date#skip-dates-where-there-is-no-data" rel="nofollow noreferrer">how to skip dates where there is no data</a>的常见问题解答。我在下面包含了他们的示例代码示例</p>
<pre><code>import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib.ticker as ticker
r = mlab.csv2rec('../data/aapl.csv')
r.sort()
r = r[-30:] # get the last 30 days
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()
</code></pre>