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改变日志(logging)存放位置的示例
Mar 27 Python
Python中字典(dict)和列表(list)的排序方法实例
Jun 16 Python
python生成验证码图片代码分享
Jan 28 Python
python使用Apriori算法进行关联性解析
Dec 21 Python
儿童编程python入门
May 08 Python
django1.11.1 models 数据库同步方法
May 30 Python
Python 2.7中文显示与处理方法
Jul 16 Python
基于OpenCV python3实现证件照换背景的方法
Mar 22 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
在pyCharm中下载第三方库的方法
Apr 18 Python
pytorch锁死在dataloader(训练时卡死)
May 28 Python
Django基础CBV装饰器和中间件
Mar 22 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微信公众平台配置接口开发程序
2016/09/22 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
IE浏览器打印的页眉页脚设置解决方法
2009/12/08 Javascript
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
Vue项目中跨域问题解决方案
2018/06/05 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
[01:55]2014DOTA2国际邀请赛快报:国土生病 紧急去医院治疗
2014/07/10 DOTA
Python中的urllib模块使用详解
2015/07/07 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
Python 下载及安装详细步骤
2019/11/04 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
canvas使用注意点总结
2013/07/19 HTML / CSS
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
数组越界问题
2015/10/21 面试题
建筑结构施工专业推荐信
2014/02/21 职场文书
临床护理求职信
2014/04/26 职场文书
学校光盘行动倡议书
2015/04/28 职场文书
企业计划生育责任书
2015/05/09 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
地球上的星星观后感
2015/06/02 职场文书
婚育证明格式
2015/06/17 职场文书
爱国主题班会教案
2015/08/14 职场文书
读《推着妈妈去旅行》有感1500字
2019/10/15 职场文书