[解決済み] Python matplotlib.dates.date2num: numpy の配列を matplotlib の datetimes に変換する
質問
日時軸を持つカスタムチャートを作図しようとしています。私の理解では、matplotlib は float フォーマットを要求し、それはエポックからの日数です。そこで、matplotlib が要求するように、numpy 配列を float epoch に変換したいのです。
datetimeの値はtというnumpyの配列に格納されています。
In [235]: t
Out[235]: array(['2008-12-01T00:00:59.000000000-0800',
'2008-12-01T00:00:59.000000000-0800',
'2008-12-01T00:00:59.000000000-0800',
'2008-12-01T00:09:26.000000000-0800',
'2008-12-01T00:09:41.000000000-0800'], dtype='datetime64[ns]')
どうやら、matplotlib.dates.date2num は、入力として一連の python データタイムだけを受け取ります (numpy データタイム配列ではありません)。
import matplotlib.dates as dates
plt_dates = dates.date2num(t)
raises AttributeError: 'numpy.datetime64' オブジェクトには 'toordinal' という属性がありません。
この問題はどのように解決すればよいのでしょうか?numpy.datetimeのようなオブジェクトのすべてのタイプで動作するソリューションがあることを望みます。
私の最良の回避策は(正しいかどうかわかりませんが)、date2numを全く使わないことです。その代わりに、私は以下を使用するようにしています。
z = np.array([0]).astype(t.dtype)
plt_dates = (t - z)/ np.timedelta64(1,'D')
この解決策が正しいとしても、手動でその場しのぎをするよりは、ライブラリ関数を使ったほうがすっきりします。
解決するには?
手っ取り早く解決したい場合は、以下をお使いください。
import matplotlib.dates as dates
plt_dates = dates.date2num(t.to_pydatetime())
または
import matplotlib.dates as dates
plt_dates = dates.date2num(list(t))
最新版 (matplotlib.__version__ '2.1.0') は、numpy 配列を好まないようです......。 編集してください。 私の場合、ソースコードを確認したところ、最新のmatplotlib.cbookではnumpy配列からiterableを作成できず、配列を数値と勘違いしていることが問題のようです。
似たような、しかしもう少し複雑な問題については、以下をご覧ください。 http://stackoverflow.com/questions/13703720/converting-between-datetime-timestamp-and-datetime64 あるいは x軸の日付をフォーマットするために matplotlib の DateFormatter を使用すると、なぜ "python int too large to convert to C long" というエラーが出るのですか? そして、もしかしたら matplotlib plot_date AttributeError: 'numpy.datetime64' オブジェクトには 'toordinal' という属性がありません。 (誰かが答えてくれれば) Edit: どなたかが答えてくれました。to_pydatetime()を使った彼のコードもベストのようです。 pandas 0.21.0 matplotlibとのタイムスタンプの互換性問題 私の場合はうまくいきませんでしたが(python 2のせい?)
関連
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonで整数から文字列に変換する
-
[解決済み] Matplotlibでプロットを表示するのではなく、画像ファイルに保存する。
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】文字列をdatetimeに変換する
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み] datetime、Timestamp、datetime64の相互変換について