【问题标题】:Python3 - Plotting the same matplotlib axes object on multiple figures?Python3 - 在多个图形上绘制相同的 matplotlib 轴对象?
【发布时间】:2021-05-06 18:02:41
【问题描述】:

我有一个脚本,我正在调整它以包含 GUI。在其中,我创建了一个带有子图的图(其排列取决于图的数量 - 例如,4 个图进入一个正方形而不是 4 个交叉)。该图(每个分析的“目标”都有一个子图)保存到 .png。

在构建 GUI 时,我正在编写“结果”框架,并希望在它们自己的选项卡上显示这些单独的子图。我已经编写了代码来按我想要的方式布置框架,但是为了将子图分成它们自己的图,我需要将完成的 Axes 对象(例如该目标的整个子图)绘制到一个新图形上框架。

由于在运行之前不知道子图的数量,我已经在一个数组(/list?)axs 中有我的 Axes 对象/子图,其成员是单个 Axes 对象(每个都包含使用 @ 创建的数据点987654322@ 以及使用ax.plot()ax.annotate 创建的几行和注释)。

当我最初创建坐标区时,我会这样做

fig, axs = plt.subplots(num='Title', nrows=numrow, ncols=numcol, 
                        figsize=[numcol*5, numrow*5], 
                        subplot_kw={'adjustable':'box', 'aspect':1})

现在有没有办法将这些轴绘制到一个新图形上(将包含在 GUI 的“结果”框架中的图形)?在我的搜索中,我只想出了将多个轴绘制到单个图形上的方法(即如何使用subplots()),但没有想到如何将预先存在的 Axes 对象放入一个新图形中'最初没有关联。我宁愿不从头开始重新绘制坐标轴——已经有很多装饰和多个数据集/线绘制在它们上面。

有什么想法吗?很高兴按要求发布代码,但由于这更像是“我该怎么做”而不是“为什么我的代码不起作用”,所以我没有发布太多。

谢谢!

【问题讨论】:

  • 不,那是不可能的。必须在给定图形上创建轴。计算机的一个好处是通常很容易告诉它们做两次。

标签: python matplotlib figure axes


【解决方案1】:

我认为这是不可能的,您必须在另一个图形中重新创建 Axes 对象。这只是代码重组的问题。请注意,您的方法不会显着提高渲染性能。 Matplotlib 无论如何都必须重新渲染 Axes 对象,这是计算成本高昂的部分。创建对象相对便宜。

你想要做的几乎是这样的:

from matplotlib import pyplot

pyplot.ion()

figure1 = pyplot.figure()
axes = figure1.add_subplot()
axes.plot([0, 1], [0, 1])

figure2 = pyplot.figure()
figure2.add_axes(axes)

引发:

ValueError: The Axes must have been created in the present figure

还有add_axes()的文档说明:

在极少数情况下,add_axes 可以使用单个参数调用,即已在当前图窗中创建但不在图窗的 Axes 列表中的 Axes 实例。

所以这很清楚地表明这不是一个受支持的用例。

【讨论】:

  • 谢谢!我想我可以从我的自定义 drawplots() 函数中取出相关块,将其包装在自己的函数中,然后在 drawplots() 和我设置 GUI 框架的块中调用它。干杯!
猜你喜欢
  • 2019-07-15
  • 1970-01-01
  • 2020-05-06
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
相关资源
最近更新 更多