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实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
Python命令行参数解析模块optparse使用实例
Apr 13 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
Jan 11 Python
Python批量提取PDF文件中文本的脚本
Mar 14 Python
python实现简单遗传算法
Mar 19 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
python 批量解压压缩文件的实例代码
Jun 27 Python
python中matplotlib条件背景颜色的实现
Sep 02 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
零基础学Python之前需要学c语言吗
Jul 21 Python
python 中的jieba分词库
Nov 23 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
php入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
PHP限制页面只能在微信自带浏览器访问的代码
2014/01/15 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
关于laravel框架中的常用目录路径函数
2019/10/23 PHP
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
jQuery的控件及事件(输入控件及回车事件)使用示例
2013/07/25 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
微信小程序中this.data与this.setData的区别详解
2018/09/17 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
2018/10/07 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
python脚本监控Tomcat服务器的方法
2018/07/06 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
如何唤起类中的一个方法
2013/11/29 面试题
银行会计职员个人的自我评价
2013/09/29 职场文书
优秀班集体获奖感言
2014/02/03 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
小学生新年寄语
2014/04/03 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
员工福利申请报告
2015/05/15 职场文书
大学生暑假实习总结
2015/07/13 职场文书
被委托人身份证明
2015/08/07 职场文书
党员公开承诺书2016
2016/03/24 职场文书
自荐信大全
2019/03/21 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript