2016-08-08 20 views
2

私はしばしばipythonシェルまたはipythonノートブックで対話的に作業しています。 言って、私はこのように、DatetimeIndexpandas.DataFrameがありませんでした:それをプロットするためにmatplotlibのデフォルトの日付軸を得るには

idx = pd.date_range("12:00", periods=400000, freq="S") 
df = pd.DataFrame({"temp":np.random.normal(size=len(idx))}, index=idx) 

、私は単純に行うことができます。

plt.plot(df.temp, '.') 

enter image description here

1を見てわかるように、どちらも私はDataFrameからうまく推測されるので、x軸データを指定しなければならないのですか、実際にx軸が日付ベースになるように指定する必要はありません。 (時間がなくなったのはplt.plot_date) それは素晴らしいです!

しかし、x軸は、2つの方法で醜い:

  • ラベルが重なって読みにくいです。
  • ラベルには日付ではなく時間が表示されます。

どれでもほぼのようにこの問題を修復します。

plt.plot(df.temp, '.') 
import matplotlib.dates as mdates 
plt.gca().xaxis.set_major_formatter(
    mdates.DateFormatter('%d-%m-%Y %H:%M:%S')) 
plt.gcf().autofmt_xdate() 

結果として表示されるように、一番左の日付ラベルはクリップされます。 leftmost date label is clipped

コードサイズを300%増加させると、すばらしいプロットが得られます。

私の質問に今

:私は私の人生のために私は日付ベースのプロットを作るとき、必ず入力する必要がありますこれら2..3のラインを、思い出すことができない

。インターフェイスが不器用で低速になります。私はいつも解決のためにgoogleする必要があります...

matplotlibは、私の個人的なデフォルト設定が日付ベースのプロットに関してどのようなものかを記憶することができますか?

私は実際にplot機能にハックすることができたと思います。しかし、おそらく私が見つけることができなかったこれらのmatplotlib.rc_paramsを使用する方法があります。

私が上記のように、plt.plotは実際に私が欲しいものを実際に推測するのに長い道のりをしています。 x軸のデータがDataFrameのインデックスになると推測します。実際に日付の数値表現ではなく、日付ベースのx軸をプロットする必要があります。どうすればいいですかこれに何かを追加しますか?

plt.plot(df.temp, '.', date_fmt='%d-%m-%Y %H:%M:%S') 

または

plt.plot(df.temp, '.', autofmt_xdate=True) 

答えて

2

あなたが使用することができDateFormatter:ながら

import matplotlib.dates as mdates 

fig, ax = plt.subplots(figsize=(8,5)) 
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y %H:%M:%S')) 
#rotates the tick labels automatically 
fig.autofmt_xdate() 

ax.plot(df["T"], '.') 

plt.show() 

graph

+0

私はと思ってい

多分いくつかのヒントのようなそれを与えますコードは確かにimp今のところ*結果を得ます。答えは私の質問の現場には当たらない。うまくいけばそれをもっと明確にするために、今質問を言い換えるつもりです。 –

+0

ありがとうございます。あなたは 'sane axis labeling'を説明してください。希望の出力を持つサンプルを追加できますか? – jezrael

+0

あなたは 'sane axis labelling 'についての部分をちょうど持っています。しかし、私は1回限りの答えに向かっていませんでしたが、私はいつもそれを解決する答えを探しています。 –

関連する問題