Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在wxPython中嵌入多个matplotlib图形_Python_Matplotlib_Wxpython - Fatal编程技术网

在wxPython中嵌入多个matplotlib图形

在wxPython中嵌入多个matplotlib图形,python,matplotlib,wxpython,Python,Matplotlib,Wxpython,我在一个面板中有一个2x2FlexGridSizer,我想同时插入四个不同的matplotlib图形及其自己的工具栏 我已经看到了许多嵌入一个图形的链接和工作示例,但由于我是wxPython和OOP的乞丐,所以在测试一些代码并试图将它们与我的代码合并时,我会感到非常困惑 这是一个wx.Notebook的页面类,我想把数字放在这里 class Pagina(wx.Panel): def __init__(self, parent): wx.Panel.__init__(se

我在一个面板中有一个2x2
FlexGridSizer
,我想同时插入四个不同的matplotlib图形及其自己的工具栏

我已经看到了许多嵌入一个图形的链接和工作示例,但由于我是wxPython和OOP的乞丐,所以在测试一些代码并试图将它们与我的代码合并时,我会感到非常困惑

这是一个
wx.Notebook
的页面类,我想把数字放在这里

class Pagina(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        self.boton_descargar = wx.Button(self, -1, label=u"Descargar")
        self.boton_desconectar = wx.Button(self, -1, label=u"Desconectar")

        sizer = wx.BoxSizer(wx.VERTICAL)
        subsizer1 = wx.BoxSizer(wx.HORIZONTAL)
        subsizer2 = wx.FlexGridSizer(rows=2, cols=2)

        sizer.Add(subsizer1, 0, wx.EXPAND | wx.ALL, 0)
        sizer.Add(subsizer2, 1, wx.EXPAND | wx.ALL, 0)
        sizer.Add(self.boton_desconectar, 0, wx.ALIGN_RIGHT | wx.RIGHT, 10)
        subsizer1.Add(self.boton_descargar, 0, wx.ALL, 10)

        self.Bind(wx.EVT_BUTTON, self.onClick_descargar, self.boton_descargar)
        self.Bind(wx.EVT_BUTTON, self.onClick_desconectar, self.boton_desconectar)

        self.SetSizer(sizer)

    def onClick_descargar(self, event):
        HiloDescarga()

    def onClick_desconectar(self, event):
        pass
HiloDescarga
实际上是一个启动的线程,用于下载一些文本行、处理数据并以这种方式绘图(第四个图是相同的):


因此,这些数字只是在单独的窗口中弹出。如果你能给我一个片段或至少一些方向,也许对绘图代码做一些修改,我不知道。欢迎您提供任何帮助。

您只需遵循示例,其中嵌入了一个图形,而是为要创建的每个图形实例化多个成员。 下面是一个简单的例子:

import matplotlib
matplotlib.use('WXAgg')
from matplotlib.figure import Figure
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
import wx


class MyFrame(wx.Frame):
    def __init__(self, parent, nbFigures=4):
        super(MyFrame, self).__init__(parent)
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.figs = [Figure(figsize=(2,1)) for _ in range(nbFigures)]
        self.axes = [fig.add_subplot(111) for fig in self.figs]
        self.canvases = [FigureCanvas(self, -1, fig) for fig in self.figs]
        for canvas in self.canvases:
            sizer.Add(canvas, 0, wx.ALL, 5)
        self.SetSizer(sizer)

app = wx.App()
frm = MyFrame(None)
frm.Show()
app.MainLoop()

我保存了数组
self.figs
中每个人物的实例,以及
self.axes


希望这能让您走上正确的道路

您只需遵循示例,其中嵌入了一个图形,而不是为要创建的每个图形实例化多个成员。 下面是一个简单的例子:

import matplotlib
matplotlib.use('WXAgg')
from matplotlib.figure import Figure
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
import wx


class MyFrame(wx.Frame):
    def __init__(self, parent, nbFigures=4):
        super(MyFrame, self).__init__(parent)
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.figs = [Figure(figsize=(2,1)) for _ in range(nbFigures)]
        self.axes = [fig.add_subplot(111) for fig in self.figs]
        self.canvases = [FigureCanvas(self, -1, fig) for fig in self.figs]
        for canvas in self.canvases:
            sizer.Add(canvas, 0, wx.ALL, 5)
        self.SetSizer(sizer)

app = wx.App()
frm = MyFrame(None)
frm.Show()
app.MainLoop()

我保存了数组
self.figs
中每个人物的实例,以及
self.axes


希望这能让你走上正轨

我马上就来试试。不过我有一个疑问。为绘图任务启动新线程是一个好主意吗?我的独立绘图脚本需要一段时间才能完成。对不起,这对你真的没有帮助。我马上就来试试。不过我有一个疑问。为绘图任务启动新线程是一个好主意吗?我的独立绘图脚本需要一段时间才能完成。很抱歉,无法真正帮助您