2020-04-16 14:05:01 --Edit by yangray

按横轴刻度的种类不同,分为数值类刻度和日期类刻度。

  • 数值类刻度

    需求:x轴数据间隔为2,显示最后24条数据。

#!/usr/bin/python
# _*_ Coding: Utf-8 _*_ import random
import matplotlib.pyplot as plt xs = [i*2 for i in range(200)]
ys = [10 + random.randint(1, 8) for i in range(len(xs))] # 绘制
plt.plot(xs, ys) '''
仅显示最后n个数据
确定一个限位框(由左下角和右上角两个点 确定位置和大小 的矩形框)
axes._set_view_from_bbox将视图范围限制在限位框内
'''
last_index = xs[-1]
# print('last_index:', last_index, type(last_index))
right, top = plt.gca().transData.transform((last_index, 42))
left, bottom = plt.gca().axes.transData.transform((last_index - 24*2, 0))
plt.gca()._set_view_from_bbox(bbox=[left, bottom, right, top]) plt.show()

  思路:确定一个限位框(由左下角和右上角两个点 确定位置和大小 的矩形框),axes._set_view_from_bbox()将视图范围限制在限位框内

  关键代码:

 last_index = xs[-1]
right, top = plt.gca().transData.transform((last_index, 42))
left, bottom = plt.gca().axes.transData.transform((last_index - 24*2, 0))
plt.gca()._set_view_from_bbox(bbox=[left, bottom, right, top])

    第一行:将横轴数据的最后一条存入 last_Index

    第二行:确定限位框的右上边,使用Axes.transData.transform()方法,将用户数据坐标系的点转换为轴域坐标系的点(从用户自己定义的坐标系 转换到 系统使用的像素坐标系)。(last_index, 42) 为 坐标系(xs, ys)中的点, 转换到轴域坐标系为(553.45, 1557.6)。

    第三行:确定限位框的左下边。左边界对应的值为 last_index - 24*2,意为last_index向左移动24个单位长度(单位长度为2, 可以从xs定义中看出来)。

    第四行:将视图显示的范围设为由(left, bottom, right, top)围成的限位框。

    

  • 日期类刻度

    需求: 时间间隔为30分钟, 显示最后24条数据(最近12小时)。

#!/usr/bin/python
# _*_ Coding: Utf-8 _*_ import random
from datetime import datetime
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import datetime, time # 假的日期数据
ex_time = datetime.datetime(2020, 4, 13, 2, 0, 0) # 起始时间
ex_timedelta = datetime.timedelta(minutes=30) # 时间间隔 30min
date_format = []
t = [ex_time + i * ex_timedelta for i in range(200)] # 将格式化的日期(月/日/年 时:分:秒)存入date_format
for i in t:
fmt_i = time.strftime('%m/%d/%Y %H:%M:%S', i.timetuple())
struct_time = datetime.datetime.strptime(fmt_i, '%m/%d/%Y %H:%M:%S') # strptime()将 字符串转struct_time
date_format.append(struct_time) xs = date_format
ys = [10 + random.randint(1, 8) for i in range(len(xs))] # 配置横坐标
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
plt.gca().xaxis.set_major_locator(mdates.HourLocator(interval=2))
plt.gca().xaxis.set_minor_formatter(mdates.DateFormatter('%m/%d/%Y'))
plt.gca().xaxis.set_minor_locator(mdates.DayLocator()) # 绘制
plt.plot(xs, ys) '''
仅显示最后n个数据
确定一个限位框(由左下角和右上角两个点 确定位置和大小 的矩形框)
axes._set_view_from_bbox将视图范围限制在限位框内
'''
last_index = xs[-1]
# print('last_index:', last_index, type(last_index))
right, top = plt.gca().transData.transform((mdates.date2num(last_index), 42))
left, bottom = plt.gca().axes.transData.transform((mdates.date2num(last_index) - 1, 0))
plt.gca()._set_view_from_bbox(bbox=[left, bottom, right, top]) plt.gca().tick_params(axis='x', which='minor', pad=10, color="#27F52F", length=5, width=2) # 配置刻度属性
plt.gcf().autofmt_xdate(which='minor') # 自动旋转日期标记 plt.show()

     思路:将日期类刻度转换为数值表示,然后作和数值类刻度一样处理。

     关键代码:

 last_index = xs[-1]
right, top = plt.gca().transData.transform((mdates.date2num(last_index), 42))
left, bottom = plt.gca().axes.transData.transform((mdates.date2num(last_index) - 1, 0))
plt.gca()._set_view_from_bbox(bbox=[left, bottom, right, top])

     第一行: 将横轴数据的最后一条存入 last_Index

     第二行:确定限位框的右上边。使用 matplotlib.dates.date2num()方法将日期(datetime.datetime对象)转换为数值,转换方法为:当前日期 - UTC时间 1年1月1日 0时0分0秒 结果的单位为天。

     第三行:确定限位框的左下边。左边界对应的值为 mdates.date2num(last_index) - 1,  意为last_index向左移动一天(单位长度为1,单位为 天 )。

     第四行:将视图显示的范围设为由(left, bottom, right, top)围成的限位框。

matplotlib 显示最后n条数据(可用于实时更新)的更多相关文章

  1. mysql根据查询结果批量更新多条数据(插入或更新)

    mysql根据查询结果批量更新多条数据(插入或更新) 1.1 前言 mysql根据查询结果执行批量更新或插入时经常会遇到1093的错误问题.基本上批量插入或新增都会涉及到子查询,mysql是建议不要对 ...

  2. Python tkinter库将matplotlib图表显示在GUI窗口上,并实时更新刷新数据

    代码 1 ''' 2 使用matplotlib创建图表,并显示在tk窗口 3 ''' 4 import matplotlib.pyplot as plt 5 from matplotlib.pylab ...

  3. Decoration2:引入Angularjs显示前台一条数据

    SpringMVC内置的RestFul API格式采用的是最复杂最全面的HATEOAS规范,对于简单应用来说,前台解析起来不方便,我们下面主要想办法重新定义一种简单的RestFulAPI. (1)先是 ...

  4. 只显示前几条数据的sql语句写法 七种数据库中Select Top的使用方法

    七种数据库中Select Top的使用方法 1. Oracle数据库 SELECT * FROM TABLENAME WHERE ROWNUM <= N 2. Infomix数据库 SELECT ...

  5. 过千万、亿条数据的mysql表更新 mysql 线程状态

    分段更新 UPDATE question SET `status`=1 WHERE status!=1 LIMIT 3000;UPDATE answer SET `status`=1 WHERE st ...

  6. Dev GridControl数据修改后实时更新数据源

      1:  /// <summary> 2:  /// 嵌入的ComboxEdit控件选择值变化事件 3:  /// </summary> 4: /// <param n ...

  7. Dev GridControl数据修改后实时更新数据源(转)

    1:  /// <summary> 2:  /// 嵌入的ComboxEdit控件选择值变化事件 3:  /// </summary> 4: /// <param nam ...

  8. vue实现两重列表集合,点击显示,点击隐藏的折叠效果,(默认显示集合最新一条数据,点击展开,显示集合所有数据)

    效果图: 默认显示最新一条数据: 点击显示所有数据: 代码: 说明:这里主要是 这块用来控制显示或者隐藏 根据当前点击的  这个方法里传递的index 对应  isShow 数组里的index  ,对 ...

  9. QTreeView处理大量数据(使用1000万条数据,每次都只是部分刷新)

    如何使QTreeView快速显示1000万条数据,并且内存占用量少呢?这个问题困扰我很久,在网上找了好多相关资料,都没有找到合理的解决方案,今天在这里把我的解决方案提供给朋友们,供大家相互学习. 我开 ...

随机推荐

  1. 【作业1.0】OO第一单元作业总结

    OO第一单元作业已全部完成,为了使这一单元的作业能够收获更多一点,我回忆起我曾经在计算机组成课设中,经常我们会写一些实验报告,经常以此对实验内容反思总结.在我们开始下一单元的作业之前,我在此对OO第一 ...

  2. Android NDK JNI 入门笔记-day04-NDK实现Hash算法

    * Android NDK JNI 入门笔记目录 * 开头 前面的学习,我们已经掌握了 NDK 开发的必备知识. 下一步就要多实践,通过创造问题并解决问题,来增加熟练度,提升经验. 日常开发中,经常会 ...

  3. json 的基础入门

    JSON是什么: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.在初始的项目开发中人们更倾向于使用xml来进行数据的传输,但当JSON出现后,开发者更倾 ...

  4. POJ1523 Tarjan求割点以及删除割点之后强连通分量的数量

    题目链接:http://poj.org/problem?id=1523 SPF:A Single Point of Failure也就是割点(一个点导致网络之间的不连通),由于给出的图是无向图,所以只 ...

  5. NodeMCU入坑指南-烧写固件并连接WIFI

    写在前面 今天入手了一个NodeMCU的板子,准备学习一下物联网相关的知识.不过由于博主学艺不精,在第一步烧写固件上就踩坑了,所以就想着把自己的踩坑经历写出来分享给大家,希望能有一些帮助~ 材料准备 ...

  6. OpenCV-Python 图像金字塔 | 二十

    目标 在本章中, 我们将学习图像金字塔 我们将使用图像金字塔创建一个新的水果"Orapple" 我们将看到以下功能:cv.pyrUp(),cv.pyrDown() 理论 通常,我们 ...

  7. TensorFlow 一步一步实现卷积神经网络

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! TensorFlow 从入门到精通系列教程: http://www ...

  8. 一书吃透机器学习!新版《机器学习基础》来了,教材PDF、PPT可下载 | 资源

    不出家门,也能学习到国外高校的研究生机器学习课程了. 今天,一本名为Foundations of Machine Learning(<机器学习基础>)的课在Reddit上热度飙升至300, ...

  9. BUAA_2020_OO_第一单元总结

    三次作业,三次成长 第一次作业--幂函数求导总结 作业思路和心得 第一次作业的要求只有x的指数这样的幂函数加减组成表达式,对表达式进行求导,而且没有格式错误的检查,所以难度感觉还不是很高.不过由于我寒 ...

  10. Selenium系列(十六) - Web UI 自动化基础实战(3)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...