5

矢筒または棘の時系列(日付)をプロットする標準的な方法は何ですか?私はよくPandasDataFrameに時系列を持ち、次のようにプロットします。

plt.plot(df.index.to_pydatetime(), df.parameter)

これは非常にうまく機能します。x軸は本物の日付として扱うことができ、Datetimeオブジェクトなどでxlim()をフォーマットまたは設定するのに非常に便利です。

これを矢筒または棘と同じように使用すると、次のようになります。

TypeError: float() argument must be a string or a number

これは、次のような方法で克服できます。

ax.barbs(df.index.values.astype('d'), np.ones(size) * 6.5, df.U.values, df.V.values, length=8, pivot='middle')
ax.set_xticklabels(df.index.to_pydatetime())

これは機能しますが、どこでも日付を浮動小数点数に変換してから手動でラベルを上書きする必要があることを意味します。もっと良い方法はありますか?

これが私の場合に似たサンプルコードです:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

size = 10

wspd = np.random.randint(0,40,size=size)
wdir = np.linspace(0,360 * np.pi/180, num=size)
U = -wspd*np.sin(wdir)
V = -wspd*np.cos(wdir)

df = pd.DataFrame(np.vstack([U,V]).T, index=pd.date_range('2012-1-1', periods=size, freq='M'), columns=['U', 'V'])

fig, ax = plt.subplots(1,1, figsize=(15,4))

ax.plot(df.index.values.astype('d'), df.V * 0.1 + 4, color='k')
ax.quiver(df.index.values.astype('d'), np.ones(size) * 3.5, df.U.values, df.V.values, pivot='mid')
ax.barbs(df.index.values.astype('d'), np.ones(size) * 6.5, df.U.values, df.V.values, length=8, pivot='middle')

ax.set_xticklabels(df.index.to_pydatetime())

ここに画像の説明を入力してください

4

2 に答える 2

3

私は次のコードを使用することになりました:

idx = mpl.dates.date2num(df.index)
ax.xaxis.set_major_formatter(mpl.dates.DateFormatter('%d-%m-%Y'))

ax.plot(idx, df.V * 0.1 + 4, 'o-',color='k')
ax.quiver(idx, np.ones(size) * 3.5, df.U.values, df.V.values, pivot='mid')
ax.barbs(idx, np.ones(size) * 6.5, df.U.values, df.V.values, length=8, pivot='middle')
于 2012-12-20T10:17:25.333 に答える
2

日付をタイムスタンプに変換してから、カスタムフォーマッター(doc)を使用して秒を選択した日付形式に変換することをお勧めします。ロケーター(doc)を少し試して、見栄えを良くする必要があります(間隔/ラベルのフィッティングに関して)。

import datetime
def tmp_f(dt,x=None):
    return datetime.datetime.fromtimestamp(dt).isoformat()
mf = matplotlib.ticker.FuncFormatter(tmp_f)

ax = gca()
ax.get_xaxis().set_major_formatter(mf)
draw()
于 2012-12-19T18:20:51.050 に答える