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中暂存上传图片的方法
Feb 18 Python
Python操作MySQL数据库9个实用实例
Dec 11 Python
Python实现的生产者、消费者问题完整实例
May 30 Python
Win10下python3.5和python2.7环境变量配置教程
Sep 18 Python
解决pycharm回车之后不能换行或不能缩进的问题
Jan 16 Python
Python list列表中删除多个重复元素操作示例
Feb 27 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
Jun 28 Python
解决Djang2.0.1中的reverse导入失败的问题
Aug 16 Python
python二元表达式用法
Dec 04 Python
Python插件机制实现详解
May 04 Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 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
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
javascript 闭包疑问
2010/12/30 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
js 获取范围内的随机数实例代码
2016/08/02 Javascript
JS中对Cookie的操作详解
2016/08/05 Javascript
jQuery实现给input绑定回车事件的方法
2017/02/09 Javascript
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
Python内置函数之filter map reduce介绍
2014/11/30 Python
python内存管理分析
2015/04/08 Python
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
Python KMeans聚类问题分析
2018/02/23 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
在Pycharm中调试Django项目程序的操作方法
2019/07/17 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
基于Pytorch SSD模型分析
2020/02/18 Python
Python 没有main函数的原因
2020/07/10 Python
HTML5是否真的可以取代Flash
2010/02/10 HTML / CSS
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
销售行业个人求职自荐信
2013/09/25 职场文书
学习心得体会
2014/01/01 职场文书
争论的故事教学反思
2014/02/06 职场文书
治安消防安全责任书
2014/07/23 职场文书
法人身份证明书
2015/06/18 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers