python3 读取txt文件数据,绘制趋势图,matplotlib模块
python3 读取txt文件数据,绘制趋势图
test1.txt内容如下:
时间/min cpu使用率/% 内存使用率/%
01/12-17:06 0.01 7.61
01/12-17:07 0.03 7.61
01/12-17:08 0.3 7.61
01/12-17:09 0.7 7.61
01/12-17:10 0.1 7.61
脚本如下:
import matplotlib.pyplot as plt
from itertools import islice
import os
a = []
b = []
c = []
with open(r'D:\result\test1.txt',mode='r',encoding='utf-8') as f: #以只读方式打开txt文本文件
for lines in islice(f,1,None): #去掉首行,读取所有行
lines=lines.rstrip("\n") #去掉读取出来的换行符
lines1=lines.split(" ")[0] #以空格为分割,获取第1个值
lines2=lines.split(" ")[1] #以空格为分割,获取第2个值
lines3=lines.split(" ")[2] #以空格为分割,获取第2个值
a.append(lines1) #将值追加至a列表
b.append(float(lines2)) #将值追加至b列表,并将列表的str类型转换为float
c.append(float(lines3)) #将值追加至c列表,并将列表的str类型转换为float
ax1 = plt.subplot(211) # 创建子图 ax1
ax2 = plt.subplot(212) # 创建子图 ax2
plt.sca(ax1) # 选择子图ax1
plt.tight_layout() # 设置子图之间默认的间距
#设置x,y轴
plt.plot(a,b)
#设置x轴显示间隔(假如x轴数据较多,x轴显示重叠,我们可以控制x轴的显示间隔)
plt.xticks(range(0,4,2))
#给图标指定标题
plt.title("CPU",fontsize=24)
#为X轴设置标题
plt.xlabel("Time/m",fontsize=14)
#为Y轴设置标题
plt.ylabel("CPU/%",fontsize=14)
#设置刻度标记大小,rotation表示刻度值倾斜角度
plt.xticks(a,rotation=60,color='blue')
plt.sca(ax2) # 选择子图ax2
plt.plot(a, c) # 在子图ax2 中绘制
#展示所有图表
plt.show()
效果图如下:

绘图参考:
https://blog.csdn.net/u014453898/article/details/73395522
https://www.cnblogs.com/zhizhan/p/5615947.html
新增鼠标移动标注
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import os
from itertools import islice
from matplotlib import font_manager as fm, rcParams
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False #这两行需要手动设置 a = []
b = []
# fig = plt.figure()
# po_annotation = []
with open(r'D:\result\biaogancloud.txt',mode='r',encoding='utf-8') as f:
for lines in islice(f,1,None):
lines=lines.rstrip("\n")
# print(lines.split(" ")[1])
lines1=lines.split(" ")[0]
lines2=lines.split(" ")[1]
a.append(lines1)
b.append(float(lines2)) # ---------- 画图 ----------
fig, ax = plt.subplots() # 网格显示
ax.grid(color='b' , linewidth='0.3' ,linestyle='-.')
#折线图
ax.plot(a, b, color='royalblue', lw=2.5, label='data')
# 折线图上的散点
ax.scatter(a, b, marker='o', c='darkgreen')
ax.scatter(a, b, marker='o', c='firebrick') # 一些小设置
# 设置 x 轴显示密度
# tick_spacing = 8
# ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
# 设置 x 坐标轴标签的显示内容和大小
plt.xlabel('时间', fontsize=16)
# 设置 x 坐标轴刻度的旋转方向和大小
plt.xticks(rotation=90, fontsize=16)
# 设置 y 坐标轴刻度大小
plt.yticks(fontsize=18)
# 坐标轴中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 调整图的位置
plt.subplots_adjust(top=0.9, bottom=0.22)
# 设置尺寸
fig.set_size_inches(24, 12) po_annotation1 = []
for i in range(len(a)):
# 标注点的坐标
point_x = a[i]
point_y = b[i]
point, = plt.plot(point_x, point_y, 'o', c='darkgreen')
# 标注框偏移量
offset1 = 10
offset2 = 10
# 标注框
bbox1 = dict(boxstyle="round", fc='lightgreen', alpha=0.6)
# 标注箭头
arrowprops1 = dict(arrowstyle="->", connectionstyle="arc3,rad=0.")
# 标注
annotation = plt.annotate(text=(a[i],b[i]), xy=(a[i], b[i]), xytext=(-offset1, offset2), textcoords='offset points',
bbox=bbox1, arrowprops=arrowprops1, size=15)
# 默认鼠标未指向时不显示标注信息
annotation.set_visible(False)
po_annotation1.append([point, annotation]) # 定义鼠标响应函数
def on_move(event):
visibility_changed = False
for point, annotation in po_annotation1:
should_be_visible = (point.contains(event)[0] == True) if should_be_visible != annotation.get_visible():
visibility_changed = True
annotation.set_visible(should_be_visible) if visibility_changed:
plt.draw() # 鼠标移动事件
on_move_id = fig.canvas.mpl_connect('motion_notify_event', on_move)
plt.show()
参考:https://blog.csdn.net/bz_xyz/article/details/108257194
python3 读取txt文件数据,绘制趋势图,matplotlib模块的更多相关文章
- 3.C++逐行读取txt文件数据,利用getline -windows编程
引言:今天学会了getline的用法,顺手编写一个逐行读取txt文件的程序.关于getline的用法可以看我之前的博客:2.C++标准库函数:getline函数 定界流输入截取函数 -zobol的 ...
- Yii读取TXT文件数据插入到数据库
个人平时会用到的方法,记录一下并分享给需要的朋友,Yii批量添加还需要clone一下model才可以,不然只会插入一条数据. 也可以把文件通过参数的方式调入到方法中. // 读取CVS文件 funct ...
- python读取csv文件数据绘制图像,例子绘制天气每天最高最低气温气象图
- Excel应该这么玩——7、我是预言家:绘制趋势图
让我们先看一个场景:你是公司销售部的员工,你手里有公司最近几年的销售额相关的数据,经理希望你预测下个月的销售额.盯着一堆数据,你或许会想到画一张XY坐标图,然后将每个月份的销售额标定为一个坐标.但是下 ...
- Javascript写入txt和读取txt文件的方法
文章主要介绍了Javascript写入txt和读取txt文件的方法,需要的朋友可以参考下1. 写入 FileSystemObject可以将文件翻译成文件流. 第一步: 例: 复制代码 代码如下: Va ...
- 用C#读取txt文件的方法
1.使用FileStream读写文件 文件头: using System;using System.Collections.Generic;using System.Text;using System ...
- java 读取TXT文件的方法
java读取txt文件内容.可以作如下理解: 首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了. 通过这条线路 ...
- java读取TXT文件的方法
java读取txt文件内容.可以作如下理解: 首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了. 通过这条线路 ...
- 读取txt文件加DevExpress之进度条progressBarControl
进度条使用 主要掌握下边几个命令, //水平进度条 progressBarControlH.Properties.Minimum = 0;//1:设置最大数量,比如读取txt文件内容,先要查出行数,然 ...
随机推荐
- Java性能调优实战,覆盖80%以上调优场景
Java 性能调优对于每一个奋战在开发一线的技术人来说,随着系统访问量的增加.代码的臃肿,各种性能问题便会层出不穷. 日渐复杂的系统,错综复杂的性能调优,都对Java工程师的技术广度和技术深度提出了更 ...
- JDK8中新日期时间API
它们面临的问题是:可变性:像日期和时间这样的类应该是不可变的.偏移性:Date中的年份是从1900开始的,而月份都从0开始.格式化:格式化只对Date有用,Calendar则不行.此外,它们也不是线程 ...
- PAT A1025 考生排名问题
题目要求:有n个考场,每个考场有若干个考生,现给出各个考场中考生的准考证号与分数,按照分数从高到低排序,并按顺序输出所有考生的准考证号,排名,考场号以及所在的考场排名 #include<cstd ...
- HashSet、CopyOnWriteArraySet、ConcurrentSkipListSet源码解析(JDK1.8)
目录 HashSet源码解析 HashSet简单使用的demo HashSet中的变量 HashSet的构造函数 HashSet的add方法 HashSet的iterator方法 HashSet的si ...
- JavaScript深拷贝与浅拷贝的区别和实现方式
如何区分深拷贝和浅拷贝呢,简单来说对象B拷贝了对象A,如果对象A和对象B共用一个对象,对象B改变对象A跟着改变这就是浅拷贝:但如果对象B拷贝了对象A,但是对象A和对象B是分开的,那么就是深拷贝 基本数 ...
- 使用Viper读取Nacos配置(开源)
使用Viper读取Nacos配置(开源) 一.前言 目前Viper支持的Remote远程读取配置如 etcd, consul:目前还没有对Nacos进行支持,本文中将开源一个Nacos的Viper支持 ...
- CSS新特性contain,控制页面的重绘与重排
在介绍新的 CSS 属性 contain 之前,读者首先需要了解什么是页面的重绘与重排. 之前已经描述过很多次了,还不太了解的可以先看看这个提高 CSS 动画性能的正确姿势. OK,下面进入本文正题, ...
- LA2678最短子序列
题意: 给你一个正整数序列,问你在里面找到一个最短的子序列,要求子序列的和大于等于k,输出序列长度. 思路: 这个序列的每个数字都是正整数,那么就比较好想了,我们可以直接枚举终 ...
- CVE-2013-3346:十全九美的 Adobe Reader ToolButton UAF 漏洞
0x01 "Epic Turla" 网络间谍行动 在 2014 年 8 月,被誉为 "世界十大最危险的网络攻击行动" 之一的 "Epic Turla& ...
- nodejs-模块系统
Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node. ...