Python 用matplotlib画以时间日期为x轴的图像


Posted in Python onAugust 06, 2019

1.效果展示

主要效果就是,x轴 显示时间单位。

下图展示的就是想要到达的效果。

其实主要是运用了datetime.date这个类型的变量作为x轴坐标的数据输入。

Python 用matplotlib画以时间日期为x轴的图像

2. 源码

data.txt中的数据读入,用matplotlib中的pyplot画出,x轴为时间。

数据文本 data.txt,除了第一行表头外,每一列都用制表符Tab\t)隔开。

原创 粉丝 喜欢 评论 等级 访问 积分  排名
2018/06/01 69 134 266 64 5  309132 3345  12956  
2018/06/05 72 137 267 65 5  312383 3390  12832  
2018/06/10 74 141 268 68 5  316417 3432  12629  
2018/06/11 75 142 269 69 5  317327 3448  12629  
2018/06/14 76 148 270 70 5  319695 3469  12499  
2018/06/15 79 149 278 73 5  320697 3514  12590  

2018/06/23 84 149 278 73 5  325308 3582  12186  
2018/06/24 84 149 278 73 5  325583 3583  12233  
2018/06/25 84 149 278 73 5  326008 3584  12038  
2018/06/25 84 149 279 73 5  326039 3584  12038

程序源码:

# read csdn data
from datetime import datetime 
import matplotlib.pyplot as plt #引入绘图库


if __name__ == '__main__':

  # 打开文本文件 读取数据
  with open("data.txt",'r',encoding='utf-8') as f:
    data_lines = f.readlines()

  l_time  = []
  l_article = []
  l_fans  = []
  l_like  = []
  l_remark = []
  l_level  = []
  l_visit  = []
  l_score  = []
  l_rank  = []

  num = len(data_lines)

  # ################
  #   整理数据
  # ################
  for i in range(1,num):
    line = data_lines[i]#从第1行开始[0行开始计数]
    if len(line) < 2:
      continue  #这行明显不是有效信息

    data = line.split('\t')
    time = data[0]
    # 使用最新日期的数据
    if len(l_time) != 0:
      if time == l_time[-1]:#如果这一行时间与上一行的时间相等,删除上一行数据
        print('删除上一行:' + time)
        l_time.pop(-1) #删除上一行记录的数据
        l_article.pop(-1)
        l_fans.pop(-1)
        l_like.pop(-1)
        l_remark.pop(-1)
        l_level.pop(-1)
        l_visit.pop(-1)
        l_score.pop(-1)
        l_rank.pop(-1)


    arti = int(data[1])
    fans = int(data[2])
    like = int(data[3])
    rmak = int(data[4])
    leve = int(data[5])
    visi = int(data[6])
    scor = int(data[7])
    rank = int(data[8])
    l_time.append(time)
    l_article.append(arti)
    l_fans.append(fans)
    l_like.append(like)
    l_remark.append(rmak)
    l_level.append(leve)
    l_visit.append(visi)
    l_score.append(scor)
    l_rank.append(rank)

  # ################
  #    画图
  # ################
  # X坐标,将str类型的数据转换为datetime.date类型的数据,作为x坐标
  xs = [datetime.strptime(d, '%Y/%m/%d').date() for d in l_time]

  plt.figure(1)
  plt.subplot(1, 3, 1)
  plt.title('Visit Number')
  plt.plot(xs, l_visit, 'o-')
  plt.xlabel('Time')
  plt.ylabel('Visit Number')

  # 只画最后一个元素点 - 数据点在文字的?右下,文字在?左上
  plt.text(xs[-1], l_visit[-1], l_visit[-1], ha='right', va='bottom', fontsize=10)


  plt.subplot(1, 3, 2)
  plt.title('Rank')
  plt.plot(xs, l_rank, 'o-')
  plt.xlabel('Time')
  plt.ylabel('Rank')
  # 只画最后一个元素点 - 数据点在文字的?右上,文字在?左下
  plt.text(xs[-1], l_rank[-1], l_rank[-1], ha='right', va='top', fontsize=10)



  plt.subplot(1, 3, 3)
  plt.title('Score')
  plt.plot(xs, l_score, 'o-')
  plt.xlabel('Time')
  plt.ylabel('Score')
  # 只画最后一个元素点 - 数据点在文字的?右下,文字在?左上
  plt.text(xs[-1], l_score[-1], l_score[-1], ha='right', va='bottom', fontsize=10)


  plt.gcf().autofmt_xdate() # 自动旋转日期标记

  # show
  plt.show()

3. 分析

主要就是matplotlib.pyplot()可以支持datatime.date类型的变量。

datetime.strptime(str, '%Y/%m/%d').date()

在shell里的运行情况:

In [5]: var = datetime.strptime('2018/3/15', '%Y/%m/%d').date()

In [6]: var
Out[6]: datetime.date(2018, 3, 15)

In [7]: type(var)
Out[7]: datetime.date

所以,源码中变量xs为含有一群datetime.date变量的list

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python执行等待程序直到第二天零点的方法
Apr 23 Python
使用python存储网页上的图片实例
May 22 Python
Python检查和同步本地时间(北京时间)的实现方法
Dec 03 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 Python
基于python-opencv3的图像显示和保存操作
Jun 27 Python
python celery分布式任务队列的使用详解
Jul 08 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
Nov 15 Python
Django 实现外键去除自动添加的后缀‘_id’
Nov 15 Python
Pycharm中import torch报错的快速解决方法
Mar 05 Python
python实现同一局域网下传输图片
Mar 20 Python
python 错误处理 assert详解
Apr 20 Python
Python之字符串的遍历的4种方式
Dec 08 Python
Django Python 获取请求头信息Content-Range的方法
Aug 06 #Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
Aug 06 #Python
django foreignkey外键使用的例子 相当于left join
Aug 06 #Python
Python Django简单实现session登录注销过程详解
Aug 06 #Python
Django框架中序列化和反序列化的例子
Aug 06 #Python
python异常触发及自定义异常类解析
Aug 06 #Python
Python DataFrame一列拆成多列以及一行拆成多行
Aug 06 #Python
You might like
浅谈电磁辐射对健康的影响
2021/03/01 无线电
PHP学习 变量使用总结
2011/03/24 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
javascript 实现 秒杀,团购 倒计时展示的记录 分享
2013/07/12 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
js表头排序实现方法
2015/01/16 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
Python使用Supervisor来管理进程的方法
2015/05/28 Python
python字符串对其居中显示的方法
2015/07/11 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
python logging日志模块原理及操作解析
2019/10/12 Python
安全资料员岗位职责
2013/12/14 职场文书
称象教学反思
2014/02/03 职场文书
商场中秋节活动方案
2014/02/07 职场文书
公司管理建议书范文
2014/03/12 职场文书
《凡卡》教学反思
2014/04/09 职场文书
廉洁校园实施方案
2014/05/25 职场文书
专升本学生毕业自我鉴定
2014/10/04 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python