2016-04-29 54 views
0

x軸に日付をプロットしようとしていますが、マージンとバーの幅の関係を理解できません。私はお互いに近くにあり、それぞれの固有の日付(バー)の間に小さな隙間で区切られたバーを持っていたいと思います。私がグラフを描くたびに、私は自分のコードで規定されていない他の日付を取得することに気付きます。適切な間隔で棒をお互いに近づけ、データを持たない日付を削除するようにコードをクリーンアップするにはどうすればよいですか。matplotlibを使用してサブプロット間の余分なスペースを削除します

import numpy as np 
import matplotlib.pyplot as plt 
import datetime 

x = [datetime.datetime(2010, 12, 1, 10, 0), 
datetime.datetime(2010, 12, 1, 10, 0), 
datetime.datetime(2011, 1, 4, 9, 0), 
datetime.datetime(2011, 5, 5, 9, 0)] 

y = [5,4, 9, 2] 

ax = plt.subplot(111) 
colors = ['r','g','b','y'] 
ax.bar(x, y, width=10,align='center',color=colors,edgecolor = "none") 
ax.xaxis_date() 

plt.show() 

私が得る結果は次のとおりです。
enter image description here

答えて

0

理由は、あなたはmatplotlibの中.bar()関数に渡すとき、xが軸ラベルではなく、値の範囲ではないということです。したがって、matplotlibは自動的にx軸の範囲を拡大/縮小します。あなたの代わりにだけあなたの日付を表示したい場合、あなたはこのような何かをしたい:

dummy_x = range(len(x)) 
ax.bar(dummy_x, y, width=10,align='center',color=colors,edgecolor = "none") 
ax.set_xticklabels(x) 

が右ラベルに書式設定を取得するには、あなたには、いくつかの追加の書式をしたいかもしれませんが、何かのように:

ax.set_xticklabels([dt.strftime("%b %Y") for dt in x]) 

グラフ上でこれを実行すると、x軸のティックはバー間の距離が同じではなくなります。表示する内容によって異なりますが、混乱する可能性があります。

0

あなたが欲しいxを作成し、tick_labelとラベルを渡すことができます。

import matplotlib.pyplot as plt 

x = [0, 0, 2, 1] 
y = [5,4, 9, 2] 

labels = ['Dec 2010', 'Dec 2010', 'Jan 2011', 'May 2011'] 

ax = plt.subplot(111) 
colors = ['r','g','b','y'] 
ax.bar(x, y,align='center',color=colors,edgecolor = "none", 
    tick_label=labels) 

plt.show()