2015-11-16 19 views
7

x軸の日付目盛りラベルの書式を調整して、YearとMonth値のみを表示しようとしています。私がオンラインで見つけたものから、私はmdates.DateFormatterを使用しなければなりませんが、それは私の現在のコードではまったく有効ではありません。誰が問題がどこにあるかを確認しますか?軸ラベルのMatplotlib DateFormatterが機能しない

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() 

を表示するだけの年月を取得することはできません...

+0

あなたがバーを描画した後、あなたは形式を設定した場合はどうなりますか? –

+0

@PaulH - .plotの後に書式を設定すると、次のようなエラーが表示されます。ValueError:DateFormatterがx = 0という値を見つけました。これは不正な日付です。これは通常、ax.xaxis_date()などの日付をプロットしていることを軸に通知していないために発生します。 ax.xaxis_date()の前に置いた場合と同じです。 – SpicyClubSauce

+0

oof - これが私がパンダでプロットするのが嫌な理由です。あなたのサンプルを再現可能にすることができますか(つまり、外部ファイルなしで 'basisDF'を作成するコードを追加してください)、私は見てみようと思います。 –

答えて

4

パンダはちょうどカスタム日時形式でうまく動作しません。 。

このような場合は、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

+0

ah gotcha。ありがとうポール! – SpicyClubSauce