matplotlib统一汇总画图

该博客介绍了一个Python脚本,用于统一汇总并绘制日志数据图表。脚本从指定目录读取文件,解析数据并根据内容绘制图像。图片分为两类:'PerfResult'和'PerfLog',分别对应不同的图表样式和指标。脚本包含获取文件列表、读取数据、绘制图像等函数,并展示了最终的图像效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一、示例代码如下:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

"""
-------------------------------------------------
   File Name:     summary_draws.py
   Description:   统一汇总画图,把同以文件下的日志数据画图画到同一张图片中;
   Author:        zhizihuahai
   CreateDate:    2021/12/23
-------------------------------------------------
"""

import os
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
import matplotlib.ticker as ticker
from matplotlib.dates import DayLocator, HourLocator, DateFormatter, drange


# 获取文件列表
def get_file_list(file_dir):
    file_list = os.listdir(file_dir)
    return file_list

# 读取文件数据
# 数据格式:2022-01-07 15:02:53   71.2
def get_data(file_path):
    fp = open(file_path, encoding='utf-8')
    fp.seek(0)
    x_data = []
    y_data = []
    i = 1
    for line in fp:
        line=line.strip()
        line_list=line.split("\t")
        y_data.append(float(line_list[-1])* 1000)
    fp.close()
    x_data = [i+1 for i in range(len(y_data))]
    return x_data, y_data

# 绘制图片
def draw_jpg(file_dir):
    # 生成图片保存相对路径
    img_file_dir = "../TestResults/PerfImg/"
    # # 创建x轴定位器,间隔1
    x_major_locator = MultipleLocator(1)
    ax = plt.gca()
    # 设置x轴的间隔
    ax.xaxis.set_major_locator(x_major_locator)
    # 设置显示汉语
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    # 设置绘制图片大小
    fig =plt.figure(figsize=(41,20), dpi=100, edgecolor="blue")
    # “111”表示“1×1网格,第一子图”
    ax = fig.add_subplot(111)
    xaxis = ax.xaxis
    yaxis = ax.yaxis
    i = 1
    file_list = get_file_list(file_dir)

    for file_name in file_list:
        if "PerfResult" in file_dir:
            # 设置绘制窗口 4*4
            plt.subplot(4,4,i)
        else:
            plt.subplot(3,3,i)
        file_path = file_dir + file_name
        x_data, y_data = get_data(file_path)
        file_name = file_name.split(".")[0]
        # 创建x轴定位器,间隔1
        x_major_locator = MultipleLocator(1)
        plt.plot(x_data, y_data, 'm-',  marker='.',  linewidth=1)

        if "PerfResult" in file_dir:
            for a, b in zip(x_data, y_data):
                b = int(b)
                # 坐标(a,b)上添加文字标签b,并设置格式大小
                plt.text(a, b, b, ha='center', va='bottom', color='blue', fontsize=15)
            # X轴名称
            plt.xlabel("Times (Times)", fontsize=18)
            # Y轴名称
            plt.ylabel("time consuming (ms)", fontsize=18)
            # 折线图标题
            plt.title("%s 耗时 (ms)" %file_name, fontsize=20)
        else:
            plt.xlabel("Time interval (2s)", fontsize=18)
            plt.ylabel("System usering (%)", fontsize=18)
            plt.title("%s 占用" %file_name,  fontsize=20)

        i = i + 1
        # 显示网格线 1=True=默认显示;0=False=不显示
        plt.grid(True)

    if "PerfResult" in file_dir:
        jpg_path = img_file_dir + "page_skip" + ".png"
    else:
        jpg_path = img_file_dir + "system_perf" + ".png"

    # 自动调整子图参数,使之填充整个图像区域
    plt.tight_layout()
    plt.grid(True)
    plt.savefig(jpg_path)
    # 清除当前图形中的当前活动轴,其他轴不受影响;
    plt.cla()
    # Close a figure window,循环后记得关闭plt
    plt.close("all")

def draw_page_skip_res():
    res_list = []
    file_dir  = "../TestResults/PerfResult/"
    file_dir1 = "../TestResults/PerfLog/"
    draw_jpg(file_dir)
    draw_jpg(file_dir1)

if __name__ == '__main__':
    draw_page_skip_res()

二、效果图如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值