一、示例代码如下:
#!/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()
二、效果图如下: