Hi,
I have two questions about using NavigationToolbar2Wx with mplot3d.

1/  Initially the 3D scatter plot will rotate as usual with a mouse, but after 
selecting the 'pan' or 'zoom' buttons the plot responds with some confusion.  
How can I restore it to rotation only, i.e. disconnect the zoom or pan 
behaviour?

2/  When using the 'save' button I get different behaviours depending on the 
backend.  With 'WXAgg' the saved png image shows only the axes, not the scatter 
points.  The scatter points and axes do appear correctly in a pdf file.  Using 
the 'WX' backend gives both scatter points and axes for the png file.

My full application has a mix of 2D and 3D plots (separate notebooks) and it 
would be preferable for users if all plots could usedthe common toolbar.

I see this behaviour running matplotlib 1.0.1 with Python 2.6.6 and wxPython 
2.8.11.0 under Windows XP with the example below.


#-----------------------------------------------------------------------------------
# adapted from example code "embedding_in_wx2.py"

import numpy as np

import matplotlib

# uncomment the following to use wx rather than wxagg
#matplotlib.use('WX')
#from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas

# comment out the following to use wx rather than wxagg
matplotlib.use('WXAgg')
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas

from matplotlib.backends.backend_wx import NavigationToolbar2Wx

from matplotlib.figure import Figure
from mpl_toolkits.mplot3d import Axes3D
import wx

class CanvasFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self,None,-1,
                         'CanvasFrame',size=(550,350))

        self.SetBackgroundColour(wx.NamedColor("WHITE"))

        self.figure = Figure()
        self.canvas = FigureCanvas(self, -1, self.figure)
        self.axes = Axes3D(self.figure)
        xs = np.random.rand(100)
        ys = np.random.rand(100)
        zs = np.random.rand(100)
        self.axes.scatter(xs, ys, zs)
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
        self.SetSizer(self.sizer)
        self.Fit()

        self.add_toolbar()  # comment this out for no toolbar


    def add_toolbar(self):
        self.toolbar = NavigationToolbar2Wx(self.canvas)
        self.toolbar.Realize()
        if wx.Platform == '__WXMAC__':
            # Mac platform (OSX 10.3, MacPython) does not seem to cope with
            # having a toolbar in a sizer. This work-around gets the buttons
            # back, but at the expense of having the toolbar at the top
            self.SetToolBar(self.toolbar)
        else:
            # On Windows platform, default window size is incorrect, so set
            # toolbar width to figure width.
            tw, th = self.toolbar.GetSizeTuple()
            fw, fh = self.canvas.GetSizeTuple()
            # By adding toolbar in sizer, we are able to put it at the bottom
            # of the frame - so appearance is closer to GTK version.
            # As noted above, doesn't work for Mac.
            self.toolbar.SetSize(wx.Size(fw, th))
            self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
        # update the axes menu on the toolbar
        self.toolbar.update()


    def OnPaint(self, event):
        self.canvas.draw()

class App(wx.App):

    def OnInit(self):
        'Create the main window and insert the custom frame'
        frame = CanvasFrame()
        frame.Show(True)
        return True

app = App(0)
app.MainLoop()

#------------------------------------------------------------------------------------------------

Regards,
Keith

________________________________
This electronic transmission and any documents accompanying this electronic 
transmission contain confidential information belonging to the sender. This 
information may be legally privileged. The information is intended only for the 
use of the individual or entity named above. If you are not the intended 
recipient, you are hereby notified that any disclosure, copying, distribution 
or the taking of any action in reliance on or regarding the contents of this 
electronically transmitted information is strictly prohibited.
------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to