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中使用M2Crypto模块实现AES加密的教程
Apr 08 Python
python类继承用法实例分析
May 27 Python
举例详解Python中threading模块的几个常用方法
Jun 18 Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 Python
python中字符串比较使用is、==和cmp()总结
Mar 18 Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
Jul 31 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
Python参数传递对象的引用原理解析
May 22 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
Aug 26 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 Python
python基于pexpect库自动获取日志信息
Feb 01 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速度全攻略
2006/10/09 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
JS在textarea光标处插入文本的小例子
2013/03/22 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
koa上传excel文件并解析的实现方法
2018/08/09 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
php结合js实现多条件组合查询
2019/05/28 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
python docx 中文字体设置的操作方法
2018/05/08 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
python实现图片九宫格分割
2021/03/07 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
班级活动策划书
2014/02/06 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
母校寄语大全
2014/04/10 职场文书
说明书范文
2014/05/07 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
文明礼仪标语
2014/06/13 职场文书
自信主题班会
2015/08/14 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
Python异常类型以及处理方法汇总
2021/06/05 Python