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 print 按逗号或空格分隔的方法
May 02 Python
Python中实例化class的执行顺序示例详解
Oct 14 Python
对python3标准库httpclient的使用详解
Dec 18 Python
解决pycharm工程启动卡住没反应的问题
Jan 19 Python
如何解决django-celery启动后迅速关闭
Oct 16 Python
Python搭建代理IP池实现获取IP的方法
Oct 27 Python
python实现LRU热点缓存及原理
Oct 29 Python
Python编程快速上手——疯狂填词程序实现方法分析
Feb 29 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
Nov 10 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 Python
如何用Python提取10000份log中的产品信息
Jan 14 Python
Matplotlib animation模块实现动态图
Feb 25 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语法(2)
2006/10/09 PHP
PHP开发入门教程之面向对象
2006/12/05 PHP
php获取apk包信息的方法
2014/08/15 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
JSON+HTML实现国家省市联动选择效果
2014/05/18 Javascript
js实现数组转换成json
2015/06/26 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
2016/08/19 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
JavaScript类的写法
2016/09/17 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
vue实例中data使用return包裹的方法
2018/08/27 Javascript
[08:47]2018国际邀请赛 OG战队举杯时刻
2018/08/29 DOTA
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
微信跳一跳游戏python脚本
2020/04/01 Python
使用memory_profiler监测python代码运行时内存消耗方法
2018/12/03 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
kali中python版本的切换方法
2019/07/11 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
python datetime处理时间小结
2020/04/16 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
加拿大大码女装购物网站:Penningtons
2020/12/26 全球购物
社区十八大感言
2014/01/19 职场文书
爱心捐款倡议书
2014/04/14 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
职工宿舍管理制度
2015/08/05 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS