zoukankan      html  css  js  c++  java
  • 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:
    esult	est1.txt',mode='r',encoding='utf-8') as f:            #以只读方式打开txt文本文件
        for lines in islice(f,1,None):            #去掉首行,读取所有行
            lines=lines.rstrip("
    ")              #去掉读取出来的换行符
            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:
    esultiaogancloud.txt',mode='r',encoding='utf-8') as f:
        for lines in islice(f,1,None):
            lines=lines.rstrip("
    ")
            # 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

  • 相关阅读:
    微信小程序入门教程之三:脚本编程
    微信小程序入门教程之四:API 使用
    微信小程序入门教程之一:初次上手
    JZ2440开发笔记(9)——位置无关代码设计【转】
    JZ2440开发笔记(8)——FCLK、HCLK和PCLK
    JZ2440开发笔记(7)——2440启动方式
    JZ2440开发笔记(6)——存储控制器
    JZ2440开发笔记(5)——通过按键点亮LED
    JZ2440开发笔记(4)——设置静态IP
    JZ2440开发笔记(3)——配置TFTP
  • 原文地址:https://www.cnblogs.com/yizhipanghu/p/14271311.html
Copyright © 2011-2022 走看看