当前位置: 首页 > 面试题库 >

matplotlib:我可以创建AxesSubplot对象,然后将它们添加到Figure实例中吗?

谭昕
2023-03-14
问题内容

综观matplotlib文档,似乎标准的方式来添加AxesSubplot一个Figure是使用Figure.add_subplot

from matplotlib import pyplot

fig = pyplot.figure()
ax = fig.add_subplot(1,1,1)
ax.hist( some params .... )

我希望能够AxesSubPlot独立于图形创建类似对象,因此可以在不同图形中使用它们。就像是

fig = pyplot.figure()
histoA = some_axes_subplot_maker.hist( some params ..... )
histoA = some_axes_subplot_maker.hist( some other params ..... )
# make one figure with both plots
fig.add_subaxes(histo1, 211)
fig.add_subaxes(histo1, 212)
fig2 = pyplot.figure()
# make a figure with the first plot only
fig2.add_subaxes(histo1, 111)

这有可能matplotlib吗?如果可以,我该怎么做?

更新:我没有设法使轴和图形的创建脱钩,但是以下答案中的示例可以轻松地在新实例或olf Figure实例中重用先前创建的轴。这可以用一个简单的函数说明:

def plot_axes(ax, fig=None, geometry=(1,1,1)):
    if fig is None:
        fig = plt.figure()
    if ax.get_geometry() != geometry :
        ax.change_geometry(*geometry)
    ax = fig.axes.append(ax)
    return fig

问题答案:

通常,你只需将轴实例传递给函数。

例如:

import matplotlib.pyplot as plt
import numpy as np

def main():
    x = np.linspace(0, 6 * np.pi, 100)

    fig1, (ax1, ax2) = plt.subplots(nrows=2)
    plot(x, np.sin(x), ax1)
    plot(x, np.random.random(100), ax2)

    fig2 = plt.figure()
    plot(x, np.cos(x))

    plt.show()

def plot(x, y, ax=None):
    if ax is None:
        ax = plt.gca()
    line, = ax.plot(x, y, 'go')
    ax.set_ylabel('Yabba dabba do!')
    return line

if __name__ == '__main__':
    main()

要回答你的问题,你始终可以执行以下操作:

def subplot(data, fig=None, index=111):
    if fig is None:
        fig = plt.figure()
    ax = fig.add_subplot(index)
    ax.plot(data)

另外,你可以简单地将轴实例添加到另一个图形中:

import matplotlib.pyplot as plt

fig1, ax = plt.subplots()
ax.plot(range(10))

fig2 = plt.figure()
fig2.axes.append(ax)

plt.show()

调整其大小以匹配其他子图“形状”也是可能的,但是它将很快变得麻烦多于其应有的价值。以我的经验,对于复杂的情况,仅绕过图形或轴实例(或实例列表)的方法要简单得多。



 类似资料:
  • 通过前面的学习,我们知道 模块能够快速地生成图像,但如果使用面向对象的编程思想,我们就可以更好地控制和自定义图像。 在 Matplotlib 中,面向对象编程的核心思想是创建图形对象(figure object)。通过图形对象来调用其它的方法和属性,这样有助于我们更好地处理多个画布。在这个过程中,pyplot 负责生成图形对象,并通过该对象来添加一个或多个 axes 对象(即绘图区域)。 Matp

  • 问题内容: 我试图将对象(JavaBean)添加到列表中。 这只会创建一个(类型)对象,因此它会向同一对象添加9次相同数据。 这将创建多个对象,并使用diff值添加9个diff对象。 如果(for循环)每次创建一个请求时都创建数百个对象而不是9个,该怎么办?那么它在内存中的转储对吗? 如何避免这种情况? 提前致谢。 问题答案: 当你这样做 该行将 对象添加到列表中,无论其状态是否更改或它是同一对象

  • 我正在尝试在程序运行期间将 JButton 添加到坐在 JFrame 中的 JPanel 中。该按钮实际上可以正常工作(可单击),但不会显示。 我已经使用setLayout(null)将框架和面板的布局都设置为null 这里可能发生了什么? 编辑:我只是尝试在面板的构造函数中简单地向jPanel添加一个jtab,但即使这样也不行…

  • 问题内容: 我正在尝试将matplotlib对象加载到reportlab。这是我的代码: 我的目标是将绘图图像插入报告中。这工作正常,但我不想写入临时文件。我之所以尝试安装PIL,是因为我已经读过一些使用PIL图像库的人,但是一旦安装PIL,由于Pillow版本不兼容,我的另一部分代码就会中断。 问题答案: 这个问题的第一个答案中讨论的pdfrw示例有点笨拙的唯一原因是因为pdfrw文档很烂。由于

  • 我尝试使用和将添加到中,但无法将添加到中。我正在使用NetBeans和后端MySQL。请帮帮我. 编辑:谢谢,但我不知道如何分组。你能帮帮我吗?我有4列。第一列单元格包含项目名称,第二列单元格包含数量,第三列和第四列单元格连接JRadio按钮。然后我想在每一行中分组包含JRadio按钮的第三列和第四列单元格 编辑:如果我试图通过使用这个在jTable的自定义代码中添加radiobutton, ,那

  • 我可以访问figure实例。我知道在这个图中有一个图例,我可以通过。现在我想更改图例的属性。其中一些我可以通过设置器访问,比如。 创建图例时,它接受多个关键字参数: 类matplotlib。传奇传奇(父项、句柄、标签、loc=None、numpoints=None、markerscale=None、scatterpoints=None、scatteryoffsets=None、prop=None、