实现一个时间为横坐标,整数为纵坐标的例子:
import datetime
import matplotlib.pyplot as plt
#导入中文字体,避免显示乱码
import pylab as mpl
import numpy as np
#数据源
list_date = ['20190813', '20190814', '20190815', '20190816', '20190819']
list_count = [8, 8, 6, 11, 19]
#中文乱码问题
mpl.rcParams['font.sans-serif'] = ['SimHei']
# 生成figure对象,相当于准备一个画板
fig = plt.figure(figsize=(8, 3))
# 生成axis对象,相当于在画板上准备一张白纸,111,11表示只有一个表格,
#第3个1,表示在第1个表格上画图
ax = fig.add_subplot(111)
plt.title(conspt)
plt.xlabel('日期')
plt.ylabel('涨停数量')
#将字符串的日期,转换成日期对象
xs = [datetime.datetime.strptime(d, '%Y%m%d').date() for d in list_date]
#日期对象作为参数设置到横坐标,并且使用list_date中的字符串日志作为对象的标签(别名)
plt.xticks(xs, list_date, rotation=45, fontsize=10)
plt.yticks(np.arange(0, 30, step=2), fontsize=10)
ax.plot(xs, list_count, color='r')
#下方图片显示不完整的问题
plt.tight_layout()
#在点阵上方标明数值
for x, y in zip(xs, list_count):
plt.text(x, y + 0.3, str(y), ha='center', va='bottom', fontsize=10)
效果:
等等!好像哪里看着不对劲!看,20190816~20190819之间间隔超级大。由于这两天是周末,非交易日,所有没有点。我们必须要把这个空间干掉。
既然已经知道了它的原理,处理起来就简单了。只需设置一个等间距的坐标,例如1,2,3,4,5,6......,然后给这些坐标值设置一个别名,即可。
修改:
#x坐标的刻度值
ar_xticks = np.arange(1, len(list_date)+1, step=1)
plt.xticks(ar_xticks, list_date, rotation=45, fontsize=10)
plt.yticks(np.arange(0, 30, step=2), fontsize=10)
ax.plot(ar_xticks, list_count, color='r')
效果: