2017-05-20 10 views
2

私は、このようなデータをプロットしています:パンダをプロットしながら新年の始まりをマークする方法シリーズ?

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


a = pd.DatetimeIndex(start='2010-01-01',end='2011-06-01' , freq='M') 
b = pd.Series(np.random.randn(len(a)), index=a) 

私はバーの形式にするためのプロットをしたいと思いますので、私はこれを使用します。

b.plot(kind='bar') 

これは私が得るものです:

enter image description here

ご覧のとおり、日付は完全にフォーマットされていますが、これは非常に醜く判読不能です。 、私はそれが数ヶ月を含み、非常にこの形式を好む enter image description here

年の始まりをマーク:あなたが見ることができるように

b.plot() 

:私はとても素敵な日付フォーマットを作成し、このコマンドをテストするために起こりました容易に読める。

いくつかの検索を行った後、私はその形式に得ることができる最も近いがこれを使用している:

fig, ax = plt.subplots() 
ax.plot(b.index, b) 
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b')) 

出力は次のようになりますただし: enter image description here

私はX上の月の名前を持つことができますよ私は最初の書式設定がはるかに好きです。それははるかにエレガントです。誰も私のバープロットのために同じ正確なxticksを得る方法を知っていますか?

+0

ん[この](http://stackoverflow.com/questions/5902371/matplotlib-bar-chart-をwith-dates)は役に立ちますか? – Nuageux

+0

@Nuageuxご意見ありがとうございます。それは素敵な投稿ですが、正確には私が望むものではありません。 2番目の数字のように、毎年1月だけを追加することができれば素晴らしいだろう。 – Moh

答えて

0

ここでは、探しているフォーマットを得るためのソリューションを紹介します。あなたは直接目盛りラベルを編集し、set_major_formatter()方法を使用することができます

fig, ax = plt.subplots() 

ax.bar(b.index, b) 

ticklabels = [item.strftime('%b') for item in b.index] #['']*len(b.index) 
ticklabels[::12] = [item.strftime('%b\n%Y') for item in b.index[::12]] 
ax.xaxis.set_major_formatter(matplotlib.ticker.FixedFormatter(ticklabels)) 
ax.set_xticks(b.index) 
plt.gcf().autofmt_xdate() 

出力: enter image description here

関連する問題