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

Matplotlib:使用图形对象初始化图形,第1张

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
)来完成此任务



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5630639.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存