对于python中matplotlib及其他相关画图第三方库的简单整合

FigureMVC快速使用说明


前言

科研工作中,作图涉及数据处理,作图函数选择,图像、画板参数配置等,工序复杂且彼此之间的耦合度很高,使得常规图形的绘制每次只能从头开始,代码复用率极低。同时,一张好图的关键在于图像中各元素的参数配置,若能将其形成模板保留下来,将能大大提升画出好图的概率。

本项目基于matplotlib及其他相关画图第三方库(如seaborn)作简单的包装,旨在借鉴MVC的部分设计思路整合常用的作图方法,实现作图流程化和低耦合度的效果。 本项目将作图过程抽象为,定制画板(Figure)和画笔(Axes),操作画笔作草图,应用定制化模板(Template)到草图和后续处理(图像的展示与保存)四个步骤,作图流程清晰,彼此之间耦合度不高,且同类型图像,只需要更改输入数据,即可完成图像输出,也可在Tempalte中自定义图像参数,代码复用率高。为了优化体验,项目基于包装器设计模式集成了异常处理机制,查看控制台的异常提示即可锁定大致错误类型。

使用前,根据requirements.txt,安装所需全部库函数。

使用时,导入service下的FigureService类

from service.FigureService import FigureService

作图时,创建好FigureService实例,准备作图数据,调用对应作图函数生成草图,配置对应模板成图,最后输出和保存图像。

项目链接:https://github.com/yyc2686/FigureMVC

一、定制画板(Figure)和画笔(Axes)

from service.FigureService import FigureService

# 创建FigureService实例,FigureService会自动调用initFigure(),完成画板(Figure)和画笔(Axes)的初始化
figureService = FigureService(num=1, figsize=(10, 8))  # num为图编号,默认为1;figsize为画布大小

二、操作画笔作草图

import numpy as np

# 数据预处理
x = np.linspace(-10, 10, 50)
y = 2 * x + 1

# 绘制图形
figureService.drawLine(x=x, y=y)

三、应用定制化模板(Template)到草图

import numpy as np

# 使用模板
figureService.commonTemplate(xlim=(-1, 2),
                             ylim=(-2, 3),
                             xlabel="I am x",
                             ylabel="I am y",
                             xticks=np.linspace(-1, 2, 5),
                             yticks=[-2, -1.8, -1, 1.22, 3],
                             ytick_labels=[
                                 r'$really\ bad$', r'$bad$', r'$normal$',
                                 r'$good$', r'$really\ good$'
                             ],
                             tickFont=14,
                             showLegend=False)

四、后续处理(图像的展示与保存)

from resources.configuration import PATH  # PATH为配置的工程目录下的默认文件保存路径

# 输出与保存(PDF)
figureService.figureShow()
figureService.figureSave(savePath=PATH.get("out/pdf"), saveName="simpleLine")

目前FigureService支持绘制线图、散点图、柱状图、箱线图、分布图和热力图等常用图像。
若想要拓展其他图像或者复杂的组合图像,仅需在service.FigureService中的Axes类中,编写自定义的方法即可,如:

@classmethod
def function(cls, *args, **kwargs):
    try:
        drawing = """自定义方法主题"""
        cls.handles.append(drawing)
        return drawing
    except Exception as errMsg:
        raise BusinessException(EmBusinessError.FIGURE_AXES_FAIL, errMsg)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值