web-dev-qa-db-ja.com

軸ラベルのMatplotlib DateFormatterが機能しない

X軸の日付目盛りラベルの書式を調整して、年と月の値のみが表示されるようにしています。オンラインで見つけたものから、_mdates.DateFormatter_を使用する必要がありますが、現在のコードではまったく効果がありません。誰が問題がどこにあるのかわかりますか? (日付はpandasデータフレームのインデックスです)

_import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import pandas as pd 

fig = plt.figure(figsize = (10,6))
ax = fig.add_subplot(111)

ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))

basicDF['some_column'].plot(ax=ax, kind='bar', rot=75)

ax.xaxis_date()
_

enter image description here

再現可能なシナリオコード:

_import numpy as np
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import pandas as pd 

rng = pd.date_range('1/1/2014', periods=20, freq='m')

blah = pd.DataFrame(data = np.random.randn(len(rng)), index=rng)

fig = plt.figure(figsize = (10,6))
ax = fig.add_subplot(111)

ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))

blah.plot(ax=ax, kind='bar')

ax.xaxis_date()
_

それでも、年と月だけを表示することはできません。

.plotの後にフォーマットを設定すると、次のようなエラーが発生します。

ValueError:DateFormatterはx = 0の値を検出しましたが、これは無効な日付です。これは通常、ax.xaxis_date()などを使用して、軸が日付をプロットしていることを軸に通知していないために発生します。

Ax.xaxis_date()の前にも後にも同じです。

18
SpicyClubSauce

パンダはカスタムの日付時刻形式ではうまく機能しません。

このような場合は、そのままraw matplotlibを使用する必要があります。

import numpy
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas

N = 20
numpy.random.seed(N)

dates = pandas.date_range('1/1/2014', periods=N, freq='m')
df = pandas.DataFrame(
    data=numpy.random.randn(N), 
    index=dates,
    columns=['A']
)

fig, ax = plt.subplots(figsize=(10, 6))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
ax.bar(df.index, df['A'], width=25, align='center')

そしてそれは私に与えます:

enter image description here

19
Paul H

受け入れられた回答 は、「パンダはカスタムの日時フォーマットではうまく機能しない」と主張していますが、パンダのto_datetime()関数を使用して、既存の日時シリーズを使用できますデータフレーム:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter
import pandas as pd

rng = pd.date_range('1/1/2014', periods=20, freq='m')

blah = pd.DataFrame(data = np.random.randn(len(rng)), index=pd.to_datetime(rng))

fig, ax = plt.subplots()

ax.xaxis.set_major_formatter(DateFormatter('%m-%Y'))
ax.bar(blah.index, blah[0], width=25, align='center')

結果は:

a bar graph with the dates formatted as described

利用可能なさまざまな形式 こちら を確認できます。

0
Cilantro Ditrek