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实现给数组按片赋值的方法
Jul 28 Python
Python中进程和线程的区别详解
Oct 29 Python
Jupyter中直接显示Matplotlib的图形方法
May 24 Python
python实现整数的二进制循环移位
Mar 08 Python
谈谈Python中的while循环语句
Mar 10 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
Oct 12 Python
python 实现多维数组转向量
Nov 30 Python
在Tensorflow中实现梯度下降法更新参数值
Jan 23 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
Mar 10 Python
Python openpyxl模块实现excel读写操作
Jun 30 Python
python 三种方法实现对Excel表格的读写
Nov 19 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和Mysql中转UTF8编码问题汇总
2015/10/10 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
PHP解决高并发的优化方案实例
2020/12/10 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
Javascript(AJAX)解析XML的代码(兼容FIREFOX/IE)
2010/07/11 Javascript
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
微信、QQ、微博、Safari中使用js唤起App
2018/01/24 Javascript
浅析vue深复制
2018/01/29 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
Python pickle模块用法实例
2015/04/14 Python
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
python生成随机红包的实例写法
2019/09/02 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
Python常用编译器原理及特点解析
2020/03/23 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
数据库专业英语
2012/11/30 面试题
教师申诉制度
2014/01/29 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
党员教师批评与自我批评发言稿
2014/10/15 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
运动会开幕词
2015/01/28 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL