Python 用matplotlib画以时间日期为x轴的图像

1.效果展示

主要效果就是,x轴 显示时间单位。

下图展示的就是想要到达的效果。

其实主要是运用了datetime.date这个类型的变量作为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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python画图系列之个性化显示x轴区段文字的实例

    今天在写一个研究生创新项目申报书时涉及到一个python画图问题,对于在x轴各个区段显示自定义的字符串有些疑问,特此记录. 界面如下所示: 代码如下所示: import matplotlib.pyplot as plt from pylab import * #支持中文 mpl.rcParams['font.sans-serif'] = ['SimHei'] """条形图bar""" x = ['10/Q1', '10/Q3', '11/Q1',

  • 详解Python Matplotlib解决绘图X轴值不按数组排序问题

    在用Matplotlib库绘制折线图的时候遇到一个问题,当定义一个x轴数组时,plot绘制折线图时,x轴并不会按照我们定义的数组的顺序去排列显示,例如: import matplotlib.pyplot as plt colums_x = ['aa','bc','ad','bd'] colums_y = [12,14,10,15] plt.plot(colums_x,colums_y) plt.show() 我期望的是 X 轴能够按照: aa ,bc ,ad ,bd ,从左到右显示,但plt.s

  • Python 用matplotlib画以时间日期为x轴的图像

    1.效果展示 主要效果就是,x轴 显示时间单位. 下图展示的就是想要到达的效果. 其实主要是运用了datetime.date这个类型的变量作为x轴坐标的数据输入. 2. 源码 将data.txt中的数据读入,用matplotlib中的pyplot画出,x轴为时间. 数据文本 data.txt,除了第一行表头外,每一列都用制表符Tab(\t)隔开. 原创 粉丝 喜欢 评论 等级 访问 积分 排名 2018/06/01 69 134 266 64 5 309132 3345 12956 2018/0

  • Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】

    本文实例讲述了Python基于matplotlib画箱体图检验异常值操作.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python3 import pandas as pd import os import matplotlib.pyplot as plt data=pd.read_excel('catering_sale.xls',index_col='日期') plt.rcParams['font.sans-serif']=['SimHei']#正常

  • Python利用matplotlib画出漂亮的分析图表

    目录 前言 数据集引入 折线图 饼图 散点图 面积图 直方图 条形图 前言 作为一名优秀的分析师,还是得学会一些让图表漂亮的技巧,这样子拿出去才更加有面子哈哈.好了,今天的锦囊就是介绍一下各种常见的图表,可以怎么来画吧. 数据集引入 首先引入数据集,我们还用一样的数据集吧,分别是 Salary_Ranges_by_Job_Classification以及 GlobalLandTemperaturesByCity.(具体数据集可以后台回复 plot获取) # 导入一些常用包 import pand

  • Python通过matplotlib画双层饼图及环形图简单示例

    (1) 饼图(pie),即在一个圆圈内分成几块,显示不同数据系列的占比大小,这也是我们在日常数据的图形展示中最常用的图形之一. 在python中常用matplotlib的pie来绘制,基本命令如下所示(python3.X版本): vals = [1, 2, 3, 4]#创建数据系列 fig, ax = plt.subplots()#创建子图 labels = 'A', 'B', 'C', 'D' colors = ['yellowgreen', 'gold', 'lightskyblue', '

  • 解决python中用matplotlib画多幅图时出现图形部分重叠的问题

    1.解决方法:使用函数 tight_layout() 2.具体使用方法 import matplotlib.pyplot as plt fig = plt.figure() ''' 具体的画图程序 ''' fig.tight_layout() fig.tight_layout() 功能:使得子图横纵坐标更加紧凑,主要用于自动调整图区的大小以及间距,使所有的绘图及其标题.坐标轴标签等都可以不重叠的完整显示在画布上. 参数: Pad:用于设置绘图区边缘与画布边缘的距离大小 w_pad:用于设置绘图区

  • python使用Matplotlib画条形图

    本文实例为大家分享了python使用Matplotlib画条形图的具体代码,供大家参考,具体内容如下 数据 中国的四个直辖市分别为北京市.上海市.天津市和重庆市,其2017年上半年的GDP分别为12406.8亿.13908.57亿.9386.87亿.9143.64亿. 代码 # encoding:utf-8 import matplotlib.pyplot as plt # 构建数据 GDP = [12406.8,13908.57,9386.87,9143.64] # 中文乱码的处理 plt.r

  • python使用matplotlib画饼状图

    本文实例为大家分享了python使用matplotlib画饼状图的具体代码,供大家参考,具体内容如下 代码与详细注释 from matplotlib import pyplot as plt #调节图形大小,宽,高 plt.figure(figsize=(6,9)) #定义饼状图的标签,标签是列表 labels = [u'第一部分',u'第二部分',u'第三部分'] #每个标签占多大,会自动去算百分比 sizes = [60,30,10] colors = ['red','yellowgreen

  • python使用matplotlib画柱状图、散点图

    本文实例为大家分享了python使用matplotlib画柱状图.散点图的具体代码,供大家参考,具体内容如下 柱状图(plt.bar) 代码与注释 import numpy as np from matplotlib import pyplot as plt plt.figure(figsize=(9,6)) n = 8 X = np.arange(n)+1 #X是1,2,3,4,5,6,7,8,柱的个数 # numpy.random.uniform(low=0.0, high=1.0, siz

  • 使用python 的matplotlib 画轨道实例

    如下所示: import numpy as np import matplotlib.pyplot as plt import matplotlib.patches as mpatches from scipy import stats fig = plt.figure() ax = fig.add_subplot(111, xlim=(0, 10), ylim=(-4, 4)) sx=0;sy=0;r=1.5 ; circle = mpatches.Circle((sx,sy),r,ec='b

  • Python 一篇文章看懂时间日期对象

    目录 一.时间对象time 1.测量运行时间方法 ①process_time() ②perf_counter() ③monotonic() 2.函数性能计算器 二.日期对象datetime 1.格式化日期字符串时常用的占位符 2.日期对象 3.日期转字符串 4.字符串转日期 总结 一.时间对象time time模块使用的是C语言函数库中的函数.只能处理1970/1/1到2038/12/31之间的数据. 1.测量运行时间方法 ①process_time() 主要作用就是返回当前进程处理器运行时间

随机推荐