项目中遇到要绘制cpu、内存指标数据
这里搜罗了一下使用pyecharts,可以 画出曲线图,同时标记最大值最小值,平均值,记录一下
from common.logs.logger import logger
from pyecharts import options as opts
from pyecharts.charts import Line
import time
import os
class Draw_Result(object):
"""
根据数据曲线图
"""
def __init__(self, x, y, title, cal_unit):
# 获取折线图需要绘制的数据信息;
logger.debug("获取折线图需要绘制的数据信息")
"""
Args:
x: x轴数据
y: y轴数据
title: 标题
cal_unit: 纵坐标的单位,如% MB
"""
self.x = x
self.y = y
self.title = title
self.cal_unit = cal_unit
def draw_chart(self):
# 实例化Line类为line对象, 并添加x和y对应的点;
"""
画图,将图保存在report里,并以时间tile等命名
Returns:
"""
logger.debug("进入draw_chart")
current_time = time.strftime('%Y-%m-%d %H:%M:%S')
line = (
Line()
.set_global_opts(
tooltip_opts=opts.TooltipOpts(is_show=False),
xaxis_opts=opts.AxisOpts(
type_="category",
name_location='center'
),
yaxis_opts=opts.AxisOpts(
name_location='center',
name_rotate=90,
type_="value",
axistick_opts=opts.AxisTickOpts(is_show=False),
splitline_opts=opts.SplitLineOpts(is_show=True)
),
)
.add_xaxis(self.x)
.add_yaxis(
self.title,
self.y,
is_smooth=True, #是否画曲线图
label_opts=opts.LabelOpts(is_show=False), # 不显示值
is_symbol_show=False, # 不显示点
#设置展示最大值最小值
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_="max",name="最大值", symbol="pin", symbol_size=[70,50]),
opts.MarkPointItem(type_="min", name="最小值",symbol="pin", symbol_size=[70,50], itemstyle_opts={'color':'#3CB371'}),
]
),
#设置展示平均值
markline_opts=opts.MarkLineOpts(
data=[opts.MarkLineItem(type_="average",name="平均值")]
)
)
.set_global_opts(title_opts=opts.TitleOpts(title=self.title + self.cal_unit,
title_textstyle_opts=opts.TextStyleOpts(font_size=30)),
xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate": 50}),
tooltip_opts=opts.TooltipOpts(trigger="axis")
)
)
# 将折线图信息保存到文件中;
path_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
logger.debug(f"结果保存地址{path_dir}")
line.render(path=path_dir + r'/report/' + self.title + '_' + current_time + '.html')
logger.debug(f"画完图啦")
效果
image.png