2016-07-07 5 views
0

私のy軸の目盛りは数字ではなくテキストラベルで、私のxは一連のdatetimeオブジェクトです。私はプロットの間に男のイベントのトラックを表現したい日、それはシーンです。matplotlib yの数字の代わりにテキストを使用

は、これは私のコードです:

import datetime 
from matplotlib import pyplot as plt 
from matplotlib import dates 
import matplotlib as mpl 

y_text_dict = ["go to dinner", "visit my mom", "go to park", "work"] 

x_str=["2016-06-30 09:11", 
"2016-06-30 10:11", 
"2016-06-30 12:10", 
"2016-06-30 16:57", 
"2016-06-30 17:17", 
"2016-06-30 17:33", 
"2016-06-30 17:33", 
"2016-06-30 17:48", 
"2016-06-30 17:58", 
"2016-06-30 18:27"] 
x = [datetime.datetime.strptime(time, "%Y-%m-%d %H:%M") for time in x_str] 
y = [0,3,2,1,2,2,1,1,3,2] #so the event series will be "go to dinner"->"work"->"go to park"->"visit my mom"... 
y_text = [y_text_dict[i] for i in y] 

zhfont1 = mpl.font_manager.FontProperties(fname='/Library/Fonts/Songti.ttc') 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.set_yticklabels(y_text_dict,fontproperties=zhfont1) 
#ax.set_yticks(y_text) 
ax.set_xticks(x) 
ax.xaxis.set_major_formatter(dates.DateFormatter('%d/%m/%Y %H:%M')) 
ax.grid(True) 
fig.autofmt_xdate(rotation=90) 
plt.step(x, y, where = 'post') 
plt.show() 

上記のコードの結果は次のとおりです。

enter image description here

どうやらこれは私が期待するものではありません。 また、 このようなイベントトラッキングを説明するためのより良い方法があるのでしょうか?


更新: 私は何を期待それを作るために、これらの2つの行を使用することができます。

ax.set_yticks(xrange(len(y_text_dict))) 
ax.set_yticklabels(y_text_dict) 

答えて

0

これはトリックを行う必要があります。

plt.xticks(tick_loc, tick_names) 

tick_locはの場所を設定し、あなたのティック、そしてtick_names何を表示するか。

+0

ax.set_yticks(xrange(len(y_text_dict))) ax.set_yticklabels(y_text_dict) 

と結果のプロットをzhfont1) "私はy軸にラベルを付けることができますが、値ラベルのペアに従ってy値リストを作成することはできません。 –

+0

しかし、__my__ソリューションの問題は何ですか? – Julien

+0

btw、 'ax.set_yticks(tick_loc)'と 'ax.set_yticklabels(tick_names)'を呼び出すこともできます。 – Julien

0

@Julien Bernuが示唆するように、私は次の2行を追加することによって働く私の例することができます:y_labels_dict、fontproperties =(」ax.set_yticklabelsを使用して enter image description here

関連する問題