Python matplotlib使用文本而不是y记号中的数字

Python matplotlib使用文本而不是y记号中的数字,python,datetime,matplotlib,Python,Datetime,Matplotlib,我想要我的y轴的记号是文本标签而不是数字,我的x是一系列datetime对象,我想要一个绘图来表示一天中一个人事件的轨迹,这就是场景 这是我的代码: 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"

我想要我的y轴的记号是文本标签而不是数字,我的x是一系列datetime对象,我想要一个绘图来表示一天中一个人事件的轨迹,这就是场景

这是我的代码:

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()
上述代码的结果是:

显然这不是我所期望的。 也, 我想知道是否有更好的方法来说明这种事件跟踪


更新: 我可以使用这两行代码来实现我的期望:

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

这应该可以做到:

plt.xticks(tick_loc, tick_names)

tick_loc
设置你的tick的位置,以及
tick_名称
显示什么。

正如@Julien Bernu所建议的,我可以通过添加以下两行来实现我的示例:

ax.set_yticks(xrange(len(y_text_dict)))
ax.set_yticklabels(y_text_dict)
结果是:


通过使用“ax.set_yticklabels(y_labels_dict,fontproperties=zhfont1)”我可以标记y轴,但我无法根据值标签对绘制y值列表。顺便说一句,调用
ax.set_yticks(tick_loc)
然后
ax.set_yticklabels(tick_names)
也可以。你救了我一天@朱利安·伯努,我是一个多么愚蠢的人,我几乎无法解释你的建议,但现在我明白了你告诉我的,谢谢!我不应该跳过matplotlib的初学者教程,完成这项任务后,我将一步一步地学习。