wxPython 面板中的 Matplotlib 导航工具栏
Matplotlib Navigation Toolbar in wxPython Panel
我正在开发一个 GUI(使用 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()
当我 运行 脚本得到这个:
我已将绘图面板涂成白色以突出显示它。绘图大小如何适应面板大小?
我想要这样的东西(这是蒙太奇):
另一方面,我设法从栏中删除了一些我需要的不必要的按钮,但栏不起作用,也就是说,按下按钮时没有任何反应:(
感谢您的帮助
可以在创建绘图元素 (matplotlib.figure.Figure
) 的容器时设置参数。
例如figsize
以英寸为单位设置图形尺寸,tight_layout
调整布局紧凑的子图。
figure = plt.figure(figsize = (4, 3), tight_layout=True)
或者您可以设置 matplotlib.axes.Axes
object by .set_position
:
的位置
figure = plt.figure()
axes = figure.add_subplot(111)
axes.set_position(pos = [0.15,0.3,0.55,0.55], which='both')
我正在开发一个 GUI(使用 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()
当我 运行 脚本得到这个:
我已将绘图面板涂成白色以突出显示它。绘图大小如何适应面板大小?
我想要这样的东西(这是蒙太奇):
另一方面,我设法从栏中删除了一些我需要的不必要的按钮,但栏不起作用,也就是说,按下按钮时没有任何反应:(
感谢您的帮助
可以在创建绘图元素 (matplotlib.figure.Figure
) 的容器时设置参数。
例如figsize
以英寸为单位设置图形尺寸,tight_layout
调整布局紧凑的子图。
figure = plt.figure(figsize = (4, 3), tight_layout=True)
或者您可以设置 matplotlib.axes.Axes
object by .set_position
:
figure = plt.figure()
axes = figure.add_subplot(111)
axes.set_position(pos = [0.15,0.3,0.55,0.55], which='both')