Панель навигации Matplotlib в панели wxPython - PullRequest
1 голос
/ 11 октября 2019

Я работаю над графическим интерфейсом (разработан с помощью wxPython), где вы можете строить графики на разных панелях. На данный момент у меня есть это:

from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.backends.backend_wx import NavigationToolbar2Wx
from matplotlib import pyplot as plt
import numpy as np
import wx

class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None,-1,'Plot',size=(1000,800))

        # Main Panel (It will contain other elements besides the plotting panel)
        self.mainPanel = wx.Panel(self,-1,size=(1000,800))
        self.mainPanel.SetBackgroundColour('gray')

        # Plotting panel
        self.plottingPanel = wx.Panel(self,-1,pos=(50,20),size=(500,400))
        self.plottingPanel.SetBackgroundColour('white')

        # Plot example
        figure = plt.figure()
        axes = figure.add_subplot(111)
        t = np.arange(0.0, 3.0, 0.01); s = np.cos(2 * np.pi * t);axes.plot(t,s)
        plt.title('Cosine')
        plt.xlabel('x');plt.ylabel('y')

        # Canvas
        canvas = FigureCanvas(self.plottingPanel,-1,figure)
        # Navegation toolbar
        navToolbar = NavigationToolbar2Wx(canvas)
        navToolbar.DeleteToolByPos(6);navToolbar.DeleteToolByPos(2);navToolbar.DeleteToolByPos(1)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(canvas)
        sizer.Add(navToolbar)

class App(wx.App):
    def OnInit(self):
        self.Frame = Frame()
        self.Frame.Show()
        self.SetTopWindow(self.Frame)
        return True

def main():
    app = App()
    app.MainLoop()

if __name__ == '__main__':
    main() 

Когда я запускаю скрипт, получаю это:

Я раскрасил графикпанель белого цвета, чтобы выделить его. Как адаптировать размер графика к размеру панели?

Я хочу получить что-то вроде этого (это монтаж):

С другой стороны, мне удалось исключить из панели некоторые кнопки, которые мне не нужны, но панель не работает, то есть при нажатии кнопок ничего не происходит: (

Спасибо заваша помощь

1 Ответ

0 голосов
/ 13 октября 2019

Можно установить параметры при создании контейнера для элементов графика (matplotlib.figure.Figure).
Например, figsize устанавливает размер фигуры в дюймах, а tight_layout настраивает субучастки в плотной планировке.

figure = plt.figure(figsize = (4, 3), tight_layout=True)

В качестве альтернативы вы можете установить положение объекта matplotlib.axes.Axes с помощью .set_position:

figure = plt.figure()
axes = figure.add_subplot(111)
axes.set_position(pos = [0.15,0.3,0.55,0.55], which='both')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...