2016-05-25 41 views
2

私は、2つの変数vuのシステムを持っています。私はそれらをお互いにプロットし、色で示された時間を持っていきたいと思います。ここでMatplotlib:日付ごとに色分けされ、カラーバーでラベル付けされています

インデックスがpd.to_datetime()を使用して生成された私のデータ、次のとおりです。

   v   u 
date      
2001-01-01 3.9 4.290910 
2002-01-01 2.8 5.807681 
2003-01-01 2.8 5.956179 
2004-01-01 2.6 5.771250 
2005-01-01 2.7 5.335874 
2006-01-01 3.1 4.792693 
2007-01-01 3.3 4.576049 
2008-01-01 3.0 5.008100 
2009-01-01 2.0 8.392731 
2010-01-01 2.0 9.961898 
2011-01-01 2.2 9.168686 
2012-01-01 2.7 8.360966 
2013-01-01 2.7 7.805654 
2014-01-01 2.7 6.742811 
2001-04-01 3.6 4.474629 
2002-04-01 2.6 5.899864 
2003-04-01 2.5 6.209195 
2004-04-01 2.7 5.644648 
2005-04-01 3.1 5.170083 

私はしかし、それは誤って、今の代わりに2001年の2001年から2003年からの日付範囲を設定します

fig, ax = plt.subplots() 
smap = ax.scatter(df['v'],df['u'],s=500,c=df.index, 
        edgecolors='none', marker='o', cmap=cmap)) 

cb = fig.colorbar(smap, orientation='vertical') 

cb.ax.set_yticklabels(df.index.strftime('%b %Y')) 

を試してみました-2014:

+0

はmatplotlibのメーリングリストでこの出くわしました。 http://matplotlib.1069221.n5.nabble.com/colorbar-with-date-time-formatting-td16553.html – dagrha

+0

@dagrha私もそれを発見しましたが、それは私に 'オーバーフローエラー:最大値を超える符号付き整数 'を与えました。私はhttps://github.com/patwmcnamara/GADS11-NYC-Summer2014/issues/50を見つけました。私はここでやっているようにしています。 – FooBar

+0

私はcb.axisの 'yticklabels'を設定する前に' cb.set_ticks(df.index) 'というカラーバーの目盛りを設定することで動作させました。私はdfを日付でソートし、次にreset_index()をdatetimeではなく整数にする必要があることに注意してください。 – dagrha

答えて

1

0を作成するを入力し、使用しないでください。

あなたはmy_colorsのためにそれを使用する必要があります。

cmap = plt.get_cmap('viridis') 
indices = np.linspace(0, cmap.N, len(df)) 
my_colors = [cmap(int(i)) for i in indices] 

fig, ax = plt.subplots() 
for i, idx in enumerate(df.index): 
    ax.plot(df.loc[idx, 'u'], df.loc[idx, 'v'], '.', color=my_colors[i]) 
関連する問題