我想要我的y轴' tick是文本标签而不是数字,而我的x是一系列日期时间对象,我想要一个情节来表示一天中人类事件的轨迹,即场景。
这是我的代码:
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)
答案 0 :(得分:1)
这应该可以解决问题:
plt.xticks(tick_loc, tick_names)
tick_loc
设置刻度线的位置,tick_names
显示的内容。
答案 1 :(得分:1)
ax.set_yticks(xrange(len(y_text_dict)))
ax.set_yticklabels(y_text_dict)
以及由此产生的情节: enter image description here