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连接oracle数据库实例
Oct 17 Python
python每隔N秒运行指定函数的方法
Mar 16 Python
Python中处理时间的几种方法小结
Apr 09 Python
python分析网页上所有超链接的方法
May 08 Python
Python使用OpenCV进行标定
May 08 Python
python实现将多个文件分配到多个文件夹的方法
Jan 07 Python
python里dict变成list实例方法
Jun 26 Python
python pytest进阶之xunit fixture详解
Jun 27 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
使用pandas的box_plot去除异常值
Dec 10 Python
基于Python fminunc 的替代方法
Feb 29 Python
基于Python中random.sample()的替代方案
May 23 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
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
原生js图片轮播效果实现代码
2016/10/19 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
[40:04]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python脚本实现虾米网签到功能
2016/04/12 Python
python 全局变量的import机制介绍
2017/09/07 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
python 中如何获取列表的索引
2019/07/02 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
python调用支付宝支付接口流程
2019/08/15 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
基于python代码批量处理图片resize
2020/06/04 Python
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
大学军训感言
2014/01/10 职场文书
高中体育教学反思
2014/01/29 职场文书
入党个人总结范文
2015/03/02 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
地道战观后感2000字
2015/06/04 职场文书