python3 读取txt文件数据,绘制趋势图

test1.txt内容如下:

  1. 时间/min cpu使用率/% 内存使用率/%
  2. 01/12-17:06 0.01 7.61
  3. 01/12-17:07 0.03 7.61
  4. 01/12-17:08 0.3 7.61
  5. 01/12-17:09 0.7 7.61
  6. 01/12-17:10 0.1 7.61

 

脚本如下:

  1. import matplotlib.pyplot as plt
  2. from itertools import islice
  3. import os
  4. a = []
  5. b = []
  6. c = []
  7. with open(r'D:\result\test1.txt',mode='r',encoding='utf-8') as f: #以只读方式打开txt文本文件
  8. for lines in islice(f,1,None): #去掉首行,读取所有行
  9. lines=lines.rstrip("\n") #去掉读取出来的换行符
  10. lines1=lines.split(" ")[0] #以空格为分割,获取第1个值
  11. lines2=lines.split(" ")[1] #以空格为分割,获取第2个值
  12. lines3=lines.split(" ")[2] #以空格为分割,获取第2个值
  13. a.append(lines1) #将值追加至a列表
  14. b.append(float(lines2)) #将值追加至b列表,并将列表的str类型转换为float
  15. c.append(float(lines3)) #将值追加至c列表,并将列表的str类型转换为float
  16. ax1 = plt.subplot(211) # 创建子图 ax1
  17. ax2 = plt.subplot(212) # 创建子图 ax2
  18. plt.sca(ax1) # 选择子图ax1
  19. plt.tight_layout() # 设置子图之间默认的间距
  20. #设置x,y轴
  21. plt.plot(a,b)
  22. #设置x轴显示间隔(假如x轴数据较多,x轴显示重叠,我们可以控制x轴的显示间隔)
  23. plt.xticks(range(0,4,2))
  24. #给图标指定标题
  25. plt.title("CPU",fontsize=24)
  26. #为X轴设置标题
  27. plt.xlabel("Time/m",fontsize=14)
  28. #为Y轴设置标题
  29. plt.ylabel("CPU/%",fontsize=14)
  30. #设置刻度标记大小,rotation表示刻度值倾斜角度
  31. plt.xticks(a,rotation=60,color='blue')
  32. plt.sca(ax2) # 选择子图ax2
  33. plt.plot(a, c) # 在子图ax2 中绘制
  34. #展示所有图表
  35. plt.show()

效果图如下:

绘图参考:

https://blog.csdn.net/u010021014/article/details/110393223?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-3&spm=1001.2101.3001.4242

https://blog.csdn.net/u014453898/article/details/73395522

https://www.cnblogs.com/zhizhan/p/5615947.html

新增鼠标移动标注

  1. import matplotlib.pyplot as plt
  2. import matplotlib.ticker as ticker
  3. import os
  4. from itertools import islice
  5. from matplotlib import font_manager as fm, rcParams
  6. plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
  7. plt.rcParams['axes.unicode_minus']=False #这两行需要手动设置
  8.  
  9. a = []
  10. b = []
  11. # fig = plt.figure()
  12. # po_annotation = []
  13. with open(r'D:\result\biaogancloud.txt',mode='r',encoding='utf-8') as f:
  14. for lines in islice(f,1,None):
  15. lines=lines.rstrip("\n")
  16. # print(lines.split(" ")[1])
  17. lines1=lines.split(" ")[0]
  18. lines2=lines.split(" ")[1]
  19. a.append(lines1)
  20. b.append(float(lines2))
  21.  
  22. # ---------- 画图 ----------
  23. fig, ax = plt.subplots()
  24.  
  25. # 网格显示
  26. ax.grid(color='b' , linewidth='0.3' ,linestyle='-.')
  27. #折线图
  28. ax.plot(a, b, color='royalblue', lw=2.5, label='data')
  29. # 折线图上的散点
  30. ax.scatter(a, b, marker='o', c='darkgreen')
  31. ax.scatter(a, b, marker='o', c='firebrick')
  32.  
  33. # 一些小设置
  34. # 设置 x 轴显示密度
  35. # tick_spacing = 8
  36. # ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
  37. # 设置 x 坐标轴标签的显示内容和大小
  38. plt.xlabel('时间', fontsize=16)
  39. # 设置 x 坐标轴刻度的旋转方向和大小
  40. plt.xticks(rotation=90, fontsize=16)
  41. # 设置 y 坐标轴刻度大小
  42. plt.yticks(fontsize=18)
  43. # 坐标轴中文显示
  44. plt.rcParams['font.sans-serif'] = ['SimHei']
  45. # 调整图的位置
  46. plt.subplots_adjust(top=0.9, bottom=0.22)
  47. # 设置尺寸
  48. fig.set_size_inches(24, 12)
  49.  
  50. po_annotation1 = []
  51. for i in range(len(a)):
  52. # 标注点的坐标
  53. point_x = a[i]
  54. point_y = b[i]
  55. point, = plt.plot(point_x, point_y, 'o', c='darkgreen')
  56. # 标注框偏移量
  57. offset1 = 10
  58. offset2 = 10
  59. # 标注框
  60. bbox1 = dict(boxstyle="round", fc='lightgreen', alpha=0.6)
  61. # 标注箭头
  62. arrowprops1 = dict(arrowstyle="->", connectionstyle="arc3,rad=0.")
  63. # 标注
  64. annotation = plt.annotate(text=(a[i],b[i]), xy=(a[i], b[i]), xytext=(-offset1, offset2), textcoords='offset points',
  65. bbox=bbox1, arrowprops=arrowprops1, size=15)
  66. # 默认鼠标未指向时不显示标注信息
  67. annotation.set_visible(False)
  68. po_annotation1.append([point, annotation])
  69.  
  70. # 定义鼠标响应函数
  71. def on_move(event):
  72. visibility_changed = False
  73. for point, annotation in po_annotation1:
  74. should_be_visible = (point.contains(event)[0] == True)
  75.  
  76. if should_be_visible != annotation.get_visible():
  77. visibility_changed = True
  78. annotation.set_visible(should_be_visible)
  79.  
  80. if visibility_changed:
  81. plt.draw()
  82.  
  83. # 鼠标移动事件
  84. on_move_id = fig.canvas.mpl_connect('motion_notify_event', on_move)
  85. plt.show()

参考:https://blog.csdn.net/bz_xyz/article/details/108257194

python3 读取txt文件数据,绘制趋势图,matplotlib模块的更多相关文章

  1. 3.C++逐行读取txt文件数据,利用getline -windows编程

      引言:今天学会了getline的用法,顺手编写一个逐行读取txt文件的程序.关于getline的用法可以看我之前的博客:2.C++标准库函数:getline函数 定界流输入截取函数 -zobol的 ...

  2. Yii读取TXT文件数据插入到数据库

    个人平时会用到的方法,记录一下并分享给需要的朋友,Yii批量添加还需要clone一下model才可以,不然只会插入一条数据. 也可以把文件通过参数的方式调入到方法中. // 读取CVS文件 funct ...

  3. python读取csv文件数据绘制图像,例子绘制天气每天最高最低气温气象图

  4. Excel应该这么玩——7、我是预言家:绘制趋势图

    让我们先看一个场景:你是公司销售部的员工,你手里有公司最近几年的销售额相关的数据,经理希望你预测下个月的销售额.盯着一堆数据,你或许会想到画一张XY坐标图,然后将每个月份的销售额标定为一个坐标.但是下 ...

  5. Javascript写入txt和读取txt文件的方法

    文章主要介绍了Javascript写入txt和读取txt文件的方法,需要的朋友可以参考下1. 写入 FileSystemObject可以将文件翻译成文件流. 第一步: 例: 复制代码 代码如下: Va ...

  6. 用C#读取txt文件的方法

    1.使用FileStream读写文件 文件头: using System;using System.Collections.Generic;using System.Text;using System ...

  7. java 读取TXT文件的方法

    java读取txt文件内容.可以作如下理解: 首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了. 通过这条线路 ...

  8. java读取TXT文件的方法

    java读取txt文件内容.可以作如下理解: 首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了. 通过这条线路 ...

  9. 读取txt文件加DevExpress之进度条progressBarControl

    进度条使用 主要掌握下边几个命令, //水平进度条 progressBarControlH.Properties.Minimum = 0;//1:设置最大数量,比如读取txt文件内容,先要查出行数,然 ...

随机推荐

  1. Java刷题-stack

    一.getMin栈 题目描述 实现一个特殊功能的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 输入描述: 第一行输入一个整数N,表示对栈进行的操作总数. 下面N行每行输入一个字符串S ...

  2. [Skill]从零掌握80%的业务查询SQL语句

    前言 本篇文章的主要目的是帮助初学者快速入门SQL查询,从而解决实际业务中80%的SQL查询问题. 本文主要框架如下: 上篇:介绍SQL的语法顺序和执行顺序 中篇:介绍条件子句.分组查询和排序的细节 ...

  3. day-5 xctf-when_did_you_born

    xctf-when_did_you_born 题目传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade ...

  4. SpringBoot+Dubbo+Zookeeper 实例

    前言 当下Java 生态环境里面,微服务占据了非常大的份额,现在大部分新开发的 Java选型的后台程序都很奇妙的会跟微服务发生一些关系.那目前市面上主流的微服务方向主要有 Spring 家族推出的Sp ...

  5. Box UVA - 1587

    Ivan works at a factory that produces heavy machinery. He has a simple job - he knocks up wooden box ...

  6. Palindromes UVA - 401

    ​ A regular palindrome is a string of numbers or letters that is the same forward as backward. For e ...

  7. k8s daemonset

    DaemonSet控制器会在每个节点上运行单一的副本,他非常适合部署那些节点本身提供服务或者执行维护的 Pod 例如 : 存储相关,每个节点上运行glusterd, ceph 日志收集相关,每个节点上 ...

  8. 4-1 Postman脚本的应用

    前面我们讲解了在接口发送每个请求,得到响应.这是接口本身的问题.但是"请求前后"的动作,是怎么处理的?比如在发送一个请求前,需要获取当前的时间戳,或者对我们的变量进行参数化,设置变 ...

  9. mysql 随机选取一条符合条件的记录

    暂时记录下: SELECT *  FROM `kw_user` AS t1 JOIN ( SELECT ROUND( RAND( ) * ( ( SELECT MAX( id ) FROM `kw_u ...

  10. Laravel 队列功能 简单应用

    生成任务类 默认情况下,应用程序的所有可排队任务都存储在 app/Jobs 目录下.如果 app/Jobs 目录不存在,则会在运行 make:job Artisan 命令时将创建它.你可以使用 Art ...