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/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

 

新增鼠标移动标注

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

posted @ 2021-01-13 12:03  香菜哥哥  阅读(2364)  评论(0编辑  收藏  举报