栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Matplotlib:使用图形对象初始化图形

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Matplotlib:使用图形对象初始化图形

您需要先了解一些架构

matplotlib
(请参阅此处,了解创始人和当前主要开发人员的长篇文章)。在
backend
处理渲染和与硬件对话的层的底部。在该层的顶部
artists
,其知道如何绘制通过告诉他们的自我
backend
对象做什么。在该层的顶层是模仿的
pyplot
状态机接口
MATLAB

您在图中看到的所有内容在内部都以表示,

Artist
并且艺术家可以包含其他艺术家。例如,
Axes
对象跟踪子对象,即
Artists
刺,children,标签,线条或图像等轴,而
Axes
对象则是对象的子
Figure
对象。当您(通过
fig.canvas.draw()
)告诉人物自己绘画时,所有的子代画家都是递归绘制的。

这种设计的一个缺点是,给定的an实例

Artist
可以恰好在一个图形中(并且很难在图形之间移动它们),因此您无法创建
AxesImage
对象然后继续重复使用它。

这种设计也将

Artists
已知信息分开。
Axes
对象了解tick的位置,标签和显示范围(通过了解
Axis
对象来实现,但这会使杂草更多)。像
vmin
vmax
封装在
Normalize
(doc)对象中,以进行
AxesImage
跟踪。这意味着您将需要分开处理列表中所有内容的方式。

我建议在这里使用工厂式模式或咖喱式模式

类工厂:

def set_up_axes(some, arguements):    '''    Factory to make configured axes (    '''    fig, ax = plt.subplots(1, 1) # or what ever layout you want    ax.set_*(...)    return fig, axmy_norm = matplotlib.colors.Normalize(vmin, mmax) # or write a factory to do fancier stufffig, ax = set_up_axes(...)ax.imshow(..., norm=my_norm)fig2, ax2 = set_up_axes(...)ax2.imshow(..., norm=mynorm)

您可以包装一整套kwarg,以方便地按如下方式重复使用它们:

my_imshow_args = {'extent':[...],       'interpolation':'nearest',       'norm': my_norm,        ...}ax2.imshow(..., **my_imshow_args)

咖喱状:

def my_imshow(im, ax=None, *args, **kwargs):    if ax is None:        ax = plt.gca()    # do all of your axes set up    ax.set_xlim(..)    # set default vmin and vmax    # you can drop some of these conditionals if you don't want to be    # able to explicitly override the defaults    if 'norm' not in kwargs:        vmin = kwargs.pop('vmin', None)        vmax = kwargs.pop('vmax', None)        if vmin is None: vmin = default_vmin # or what ever        if vmax is None: vmax = default_vmax        my_norm = matplotlib.colors.Normalize(vmin, mmax)        kwargs['norm'] = norm    # add a similar block for `extent`     # or any other kwargs you want to change the default of    ax.figure.canvas.draw() # if you want to force a re-draw    return ax.imshow(im, *args, **kwargs)

如果您想变得聪明,可以

plt.imshow
使用您的版本进行猴子补丁

plt.imshow = my_imshow

还有一个rcParams接口,它允许您以

matplotlib
全局方式更改许多位的默认值。

还有另一种方法(通过

partial
)来完成此任务



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/624754.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号