2

私はmatplotlibを使用していくつかの財務データをプロットしています。ただし、デフォルトの構成では、matplotlibは欠落データの代わりにギャップを挿入します。ドキュメントでは、これを解決するために日付インデックスフォーマッタを使用することを推奨しています。

ただし、ページに提供されている例で確認できます。

  • フォーマットが「2008年9月3日」=>「2008-09-03」から変更されました
  • チャートは最終サンプルで終了するのではなく、「2008-10-14」に埋め込まれます。

データのギャップを回避しながら、このデフォルトの動作を維持するにはどうすればよいですか?

編集

ドキュメントからのサンプルコードで、必要な目盛りが上に表示されています。

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()
4

1 に答える 1

1

さて、私は簡単な部分に答えます:使用するSept 03 2008代わりに取得するには:2008-09-03strftime('%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.dateOct 14 2008なので、チェック マークを付けるのは悪いことではないと思います。本当に欲しくないのですか?

于 2012-08-06T20:45:27.217 に答える