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连接mssql数据库编码问题解决方法
Jan 01 Python
python 实现红包随机生成算法的简单实例
Jan 04 Python
Python pandas常用函数详解
Feb 07 Python
Python递归实现汉诺塔算法示例
Mar 19 Python
深入浅析Python传值与传址
Jul 10 Python
老生常谈python中的重载
Nov 11 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
python basemap 画出经纬度并标定的实例
Jul 09 Python
使用python求解二次规划的问题
Feb 29 Python
python求前n个阶乘的和实例
Apr 02 Python
keras读取h5文件load_weights、load代码操作
Jun 12 Python
一小时学会TensorFlow2之基本操作2实例代码
Sep 04 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
使用adodb lite解决问题
2006/12/31 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
js数组的操作详解
2013/03/27 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
JS中数组重排序方法
2016/11/11 Javascript
微信公众平台开发教程(五)详解自定义菜单
2016/12/02 Javascript
jQuery表单验证之密码确认
2017/05/22 jQuery
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
Python运行不显示DOS窗口的解决方法
2018/10/22 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
python基础梳理(一)(推荐)
2019/04/06 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
Python实现画图软件功能方法详解
2020/07/28 Python
python在地图上画比例的实例详解
2020/11/13 Python
IE下实现类似CSS3 text-shadow文字阴影的几种方法
2011/05/11 HTML / CSS
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
《老王》教学反思
2014/02/23 职场文书
领导班子在批评与自我批评座谈会上的发言
2014/09/28 职场文书
北京颐和园导游词
2015/01/30 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers