python matlotlib绘图,以时间为横坐标

实现一个时间为横坐标,整数为纵坐标的例子:

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)

效果:

python matlotlib绘图,以时间为横坐标_第1张图片

等等!好像哪里看着不对劲!看,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')

效果:

python matlotlib绘图,以时间为横坐标_第2张图片

你可能感兴趣的:(量化交易系统,python,量化交易系统,python)