gpt4 book ai didi

python - 列出对 mpl.figure.Figure 的引用不显示图

转载 作者:太空宇宙 更新时间:2023-11-04 11:14:43 30 4
gpt4 key购买 nike

我正在尝试处理带有对象的图形列表。不幸的是,从图表列表中绘图似乎有问题。

请注释掉下面示例中的行,您会看到绘图是如何中断的:

import matplotlib as mpl
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg, FigureManagerQT


class Test:
def __init__(self):
self.figs = [mpl.figure.Figure(),mpl.figure.Figure()]
self.fig = mpl.figure.Figure()
ax = self.fig.subplots()
ax.plot([1,2],[3,4])

def show(self):
fig = self.fig # works
# fig = self.figs[0] # does not work
canvas = FigureCanvasQTAgg(fig)
figManager = FigureManagerQT(canvas, 0)

a=Test()
a.show()

结果(这就是我想要的): enter image description here

未注释行的结果: enter image description here

在其他一些测试中,我发现它可能与破坏对象有关。由于列表是可变对象,这可能是连接。我还尝试(未成功)几种解决方法来复制图形对象以进行绘图:我使用了类似fig = myCopy(self.figs[0])结合 pickle-copy .

能否请您解释一下发生的情况以及可能的解决方法?

最佳答案

__init__ 中,您将坐标轴提供给 self.fig 并绘制到此 Axes 对象:

class Test:
def __init__(self):
self.figs = [mpl.figure.Figure(),mpl.figure.Figure()]
self.fig = mpl.figure.Figure()
ax = self.fig.subplots()
ax.plot([1,2],[3,4])

self.figs 中的图形对象没有附加到它们的 Axes 对象,因此它们基本上是空的。结果,你看到的是一个空图:

def show(self):
fig = self.figs[0] # This is a figure with no axes
canvas = FigureCanvasQTAgg(fig)
figManager = FigureManagerQT(canvas, 0)

您的逻辑的问题是在 __init__ 方法中绘制数据并没有真正意义。您的工作流程应该是:

  1. 初始化
  2. 图形选择
  3. 情节
  4. 显示

我建议您添加两个方法,select_figureplot,以提高图形管理器的整体可用性:

class Test:
def __init__(self):
self.fig = None
self.figures = [mpl.figure.Figure(), mpl.figure.Figure()]

def select_figure(self, index):
self.fig = self.figures[index]

def plot(self, x, y):
ax = self.fig.subplots()
ax.plot(x, y)

def show(self):
canvas = FigureCanvasQTAgg(self.fig)
figManager = FigureManagerQT(canvas, 0)

然后你就可以实现我上面描述的工作流了:

test = Test()

test.select_figure(0)
test.plot([1, 2], [3, 4])
test.show()

test.select_figure(1)
test.plot([3, 4], [5, 6])
test.show()

关于python - 列出对 mpl.figure.Figure 的引用不显示图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57273569/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com