この回答でDateFormatterを使用した後、 pandas0.15.0とmatplotlib1.4.2を使用して、時系列をプロットし、そのx軸に年のラベルを付けようとしました。
import datetime as dt
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas.io.data as pdio
import scipy as sp
t1 = dt.datetime(1960, 1, 1)
t2 = dt.datetime(2014, 6, 1)
data = pdio.DataReader("GS10", "fred", t1, t2).resample("Q", how=sp.mean)
fig, ax1 = plt.subplots()
ax1.plot(data.index, data.GS10)
ax1.set_xlabel("Year")
ax1.set_ylabel("Rate (%)")
ax1.xaxis.set_major_formatter(mpl.dates.DateFormatter("%Y"))
fig.suptitle("10-yr Treasury Rate", fontsize=14)
fig.savefig('test.eps')
最後の行はエラーをスローします:OverflowError: Python int too large to convert to C long
このトレースバックで:
C:\ Anaconda3 \ lib \ site-packages \ IPython \ core \ formatters.py:239:FormatterWarning:image / pngフォーマッターの例外:Python intが大きすぎてCに変換できませんFormatterWarning、トレースバック(最新の呼び出しが最後):
ファイル ""、1行目、runfile( 'D:/username/latex_template/new_pandas_example.py'、wdir =' D:/ username /ラテックス_template ')
ファイル "C:\ Anaconda3 \ lib \ site-packages \ spyderlib \ widgets \ externalshell \ sitecustomize.py"、行580、runfile execfile(filename、namespace)
ファイル "C:\ Anaconda3 \ lib \ site-packages \ spyderlib \ widgets \ externalshell \ sitecustomize.py"、48行目、execfile exec(compile(open(filename、 'rb')。read()、filename、 'exec ')、名前空間)
ファイル「D:/username/latex_template/new_pandas_example.py」、18行目、fig.savefig( 'test.eps')
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ figure.py"、1470行目、savefig self.canvas.print_figure(* args、** kwargs)
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ backend_bases.py"、2194行目、print_figure ** kwargs)
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ backends \ backend_ps.py"、992行目、print_epsはself._print_ps(outfile、 'eps'、* args、** kwargs)を返します。
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ backends \ backend_ps.py"、行1020、_print_ps ** kwargs)
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ backends \ backend_ps.py"、行1110、_print_figure self.figure.draw(renderer)
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ artist.py"、59行目、draw_wrapper draw(artist、renderer、* args、** kwargs)
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ figure.py"、行1079、描画func(* args)
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ artist.py"、59行目、draw_wrapper draw(artist、renderer、* args、** kwargs)
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ axes_base.py"、行2092、draw a.draw(renderer)
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ artist.py"、59行目、draw_wrapper draw(artist、renderer、* args、** kwargs)
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ axis.py"、1114行目、draw ticks_to_draw = self._update_ticks(renderer)
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ axis.py"、行957、_update_ticks tick_tups = [t for t in self.iter_ticks()]
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ axis.py"、行957、tick_tups = [t for t in self.iter_ticks()]
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ axis.py"、行905、iter_ticks for i、val in enumerate(majorLocs)]
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ axis.py"、行905、in for i、val in enumerate(majorLocs)]
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ days.py"、行411、呼び出しdt = num2date(x、self.tz)
ファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ dates.py"、行345、num2date return _from_ordinalf(x、tz)
_from_ordinalf dt = datetime.datetime.fromordinal(ix)のファイル "C:\ Anaconda3 \ lib \ site-packages \ matplotlib \ dates.py"、行225
OverflowError:Pythonintが大きすぎてClongに変換できません
DateFormatter
ここで間違って使用していますか?matplotlib図のa軸に年(または時系列が異なる場合があるため、任意の時間形式)を簡単に配置するにはどうすればよいですか?
これはパンダ0.15の「回帰」です(インデックスのリファクタリングによる)。https://github.com/matplotlib/matplotlib/issues/3727およびhttps://github.com/pydata/pandas/issues/8614を参照してください。、ただし0.15.1で修正されています。
短編小説:matplotlibは、datetime64[ns]
以前のバージョンのパンダのタイムスタンプの配列(datetime.datetimeのサブクラスであり、matplotlibで処理できる)ではなく、パンダのインデックスを値の配列(実際には非常に大きなint64)と見なすようになりました。 。したがって、根本的な理由は、matplotlibがdatetime64を日付値としてではなくintとして処理することです。
パンダ0.15.0(ただし、新しいバージョンへのアップグレードの方が良い)の場合、2つの回避策が考えられます。
datetime64
タイプを登録して、matplotlibによって日付としても処理されるようにします。
units.registry[np.datetime64] = pd.tseries.converter.DatetimeConverter()
または、DatetimeIndex(datetime64値を含む)をメソッドを使用してdatetime.datetime
値の配列に変換し、to_pydatetime
これをプロットします。
ax1.plot(data.index.to_pydatetime(), data.GS10)
関連する質問:matplotlibを使用してx軸にdatetimeindexをプロットすると、0.14とは対照的にパンダ0.15で間違ったティックが作成されます
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加