栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > 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号