gpt4 book ai didi

python - 如何使用鼠标在 wxPython 中旋转 matplotlib 3D 图?

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:19 31 4
gpt4 key购买 nike

这是我用来在 wxPython 应用程序中显示 2D matplotlib 绘图的代码片段:

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

[wxPython application and class code snipped]

figure = Figure()
axes = figure.add_subplot(111)
canvas = FigureCanvasWxAgg(self, wx.ID_ANY, figure)
plotSizer = wx.BoxSizer(wx.VERTICAL)
plotSizer.Add(self, canvas, proportion=1, flag=wx.EXPAND)
plotPanel = wx.Panel(self, wx.ID_ANY, size=DEFAULT_PLOT_SIZE)
plotPanel.SetSizer(plotSizer)

我可以绘制坐标轴、重新绘制 Canvas 以及平移和缩放。当我尝试使用 3D 执行等效操作时,会显示 3D 图,但我无法旋转/平移/缩放。此代码中的唯一区别是额外导入 3D 和向 add_subplot() 添加投影参数。

import matplotlib
matplotlib.use('WXAgg')
from mpl_toolkits.mplot3d import axes3d
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg
from matplotlib.figure import Figure
import wx

[wxPython application and class code snipped]

figure = Figure()
axes = figure.add_subplot(111, projection="3d")
canvas = FigureCanvasWxAgg(self, wx.ID_ANY, figure)
plotSizer = wx.BoxSizer(wx.VERTICAL)
plotSizer.Add(self, canvas, proportion=1, flag=wx.EXPAND)
plotPanel = wx.Panel(self, wx.ID_ANY, size=DEFAULT_PLOT_SIZE)
plotPanel.SetSizer(plotSizer)

我收到这个警告:

...\site-packages\mpl_toolkits\mplot3d\axes3d.py:1009: UserWarning: Axes3D.figure.canvas is 'None', mouse rotation disabled.  Set canvas then call Axes3D.mouse_init().

所以我尝试在调用 FigureCanvasWxAgg() 后使用此代码设置 Axes3D.figure.canvas:

axes.figure.canvas = canvas
axes.mouse_init()

但这行不通;我仍然无法使用鼠标旋转 3D 图。

演示源代码位于 http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html使用独立的 matplotlib 工作;我可以用鼠标旋转那里的图。使用 wxPython 时如何使鼠标旋转正常工作?

最佳答案

原来我只需要交换 Canvas 和轴的创建顺序。应先创建 Canvas 并将其添加到图中,然后才能创建 3D 轴。

figure = Figure()
canvas = FigureCanvasWxAgg(self, wx.ID_ANY, figure)
axes = figure.add_subplot(111, projection="3d")
plotSizer = wx.BoxSizer(wx.VERTICAL)
plotSizer.Add(self, canvas, proportion=1, flag=wx.EXPAND)
plotPanel = wx.Panel(self, wx.ID_ANY, size=DEFAULT_PLOT_SIZE)
plotPanel.SetSizer(plotSizer)

关于python - 如何使用鼠标在 wxPython 中旋转 matplotlib 3D 图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28375264/

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