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)

效果:

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

效果:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值