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 读写txt文件 json文件的实现方法
Oct 22 Python
python中利用await关键字如何等待Future对象完成详解
Sep 07 Python
利用Python如何生成hash值示例详解
Dec 20 Python
TensorFlow深度学习之卷积神经网络CNN
Mar 09 Python
Python单元测试简单示例
Jul 03 Python
Python os.rename() 重命名目录和文件的示例
Oct 25 Python
python中dir()与__dict__属性的区别浅析
Dec 10 Python
Pycharm保存不能自动同步到远程服务器的解决方法
Jun 27 Python
python json load json 数据后出现乱序的解决方案
Feb 27 Python
python 如何实现遗传算法
Sep 22 Python
pycharm 2020 1.1的安装流程
Sep 29 Python
Python之matplotlib绘制折线图
Apr 13 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/07/08 PHP
PHP Smarty生成EXCEL文档的代码
2008/08/23 PHP
openPNE常用方法分享
2011/11/29 PHP
组合算法的PHP解答方法
2012/02/04 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
PHP实现定时执行任务的方法
2014/10/05 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
from 表单提交返回值用post或者是get方法实现
2013/08/21 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
JPype实现在python中调用JAVA的实例
2017/07/19 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
python 实现list或string按指定分段
2019/12/25 Python
Python类如何定义私有变量
2020/02/03 Python
移动端html5 meta标签的神奇功效
2016/01/06 HTML / CSS
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
Chicco婴儿用品美国官网:汽车座椅、婴儿推车、高脚椅等
2018/11/05 全球购物
英国当代时尚和街头服饰店:18montrose
2018/12/15 全球购物
我的中国梦演讲稿800字
2014/08/19 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
2015年团支书工作总结
2015/04/03 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python