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中使用摄像头实现简单的延时摄影技术
Mar 27 Python
浅谈Python数据类型之间的转换
Jun 08 Python
Python实现运行其他程序的四种方式实例分析
Aug 17 Python
使用Python对微信好友进行数据分析
Jun 27 Python
python读取文本中的坐标方法
Oct 14 Python
pycharm: 恢复(reset) 误删文件的方法
Oct 22 Python
Python自动化完成tb喵币任务的操作方法
Oct 30 Python
TensorFlow学习之分布式的TensorFlow运行环境
Feb 05 Python
浅谈python中频繁的print到底能浪费多长时间
Feb 21 Python
如何通过Python3和ssl实现加密通信功能
May 09 Python
利用Python批量识别电子账单数据的方法
Feb 08 Python
Python正则表达式中flags参数的实例详解
Apr 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
MySQL数据源表结构图示
2008/06/05 PHP
解析php开发中的中文编码问题
2013/08/08 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
javascript 网页进度条简单实例
2017/02/22 Javascript
深入理解webpack process.env.NODE_ENV配置
2020/02/23 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
[35:27]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第二场 10.29
2020/10/29 DOTA
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
深入理解Python中的super()方法
2017/11/20 Python
六行python代码的爱心曲线详解
2019/05/17 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
PageFactory设计模式基于python实现
2020/04/14 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
python与js主要区别点总结
2020/09/13 Python
德国电子商城:ComputerUniverse
2017/04/21 全球购物
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
银行介绍信范文
2014/01/10 职场文书
员工拓展培训方案
2014/02/15 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
大二学习计划书范文
2014/04/27 职场文书
离职信范本
2015/06/23 职场文书
干部理论学习心得体会
2016/01/21 职场文书
python编写函数注意事项总结
2021/03/29 Python
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript