[Mac OS 10.4.7, Python 2.4.3] Problem using plot_date

First, sorry for the long email.

I'm having a segmentation fault problem trying to use plot_date, somewhere deep in matplotlib. After giving up trying to figure out what was going wrong from within my "real" code, I wrote a "minimal" sample to try to reproduce (or not) the problem; here it is:

import datetime as dt
import wx
import matplotlib as mpl
import wxmpl

class PlotPanel(wxmpl.PlotPanel):
    def __init__(self, parent, *args, **kwargs):
        wxmpl.PlotPanel.__init__(self, parent, wx.ID_ANY, *args, **kwargs)
        self.set_crosshairs(False)
        self.Figure = self.get_figure()
        ax = self.Figure.add_subplot(111)
        ax.clear()
        ax.grid(False)
        zerodate = dt.datetime(2001,2,15)
        zero = mpl.dates.date2num(zerodate)
        x = range(int(zero), int(zero)+11)
        ax.plot_date(x,x) # Problem line; works fine with plot instead of plot_date
        self.draw()

class MainFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.PlotPanel = PlotPanel(self)
        self.MainBox = wx.BoxSizer(wx.VERTICAL)
        self.MainBox.Add(self.PlotPanel, 1, wx.EXPAND )
        self.SetSizerAndFit(self.MainBox)

class App(wx.App):
    def OnInit(self):
        self.frame = MainFrame(None)
        self.SetTopWindow(self.frame)
        self.frame.Fit()
        self.frame.Show()
        return True

if __name__ == "__main__":
    print wx.__version__
    print wxmpl.__version__
    print mpl.__version__
    app = App(0)
    app.MainLoop()

This code runs fine with plot instead of plot_date (just like my original code with the same substitution). But with plot_date, I get (please note the versions I'm using):

wx.__version__ = 2.6.3.3
wxmpl.__version__ = 1.2.7
matplotlib.__version__ = 0.87.4
Traceback (most recent call last):
  File "debugplot_date.py", line 40, in ?
    app = App(0)
  File "//Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/wx-2.6-mac-unicode/wx/_core.py", line 7700, in __init__
    self._BootstrapApp()
  File "//Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/wx-2.6-mac-unicode/wx/_core.py", line 7352, in _BootstrapApp
    return _core_.PyApp__BootstrapApp(*args, **kwargs)
  File "debugplot_date.py", line 30, in OnInit
    self.frame = MainFrame(None)
  File "debugplot_date.py", line 23, in __init__
    self.PlotPanel = PlotPanel(self)
  File "debugplot_date.py", line 18, in __init__
    self.draw()
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/wxmpl.py", line 1189, in draw
    else:
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/matplotlib/backends/backend_wxagg.py", line 61, in draw
    FigureCanvasAgg.draw(self)
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/matplotlib/backends/backend_agg.py", line 391, in draw
    self.figure.draw(renderer)
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/matplotlib/figure.py", line 532, in draw
    for a in self.axes: a.draw(renderer)
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/matplotlib/axes.py", line 1045, in draw
    a.draw(renderer)
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/matplotlib/axis.py", line 548, in draw
    majorLabels = [self.major.formatter(val, i) for i, val in enumerate(majorLocs)]
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/matplotlib/dates.py", line 369, in __call__
    return self._formatter(x, pos)
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/matplotlib/dates.py", line 247, in __call__
    dt = num2date(x, self.tz)
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/matplotlib/dates.py", line 205, in num2date
    if not iterable(x): return _from_ordinalf(x, tz)
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/matplotlib/dates.py", line 156, in _from_ordinalf
    hour, remainder = divmod(24*remainder, 1)
ValueError: need more than 0 values to unpack

Using winpdb, I determined that this line in dates.py get called 13 times before, on the 14th time, it causes a "communication failure" between winpdb and the code.

Any ideas what's up? Thanks in advance,

DG

PS: I'm on a Mac, running system 10.4.7 with Python 2.4.3 (#1, Apr 7 2006, 10:54:33) [GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin

Update numpy. Or matplotlib. Or in matplotlib/dates.py, change line 155 from
remainder = x - ix
to
remainder = float(x) - ix

···

On Wednesday 23 August 2006 02:19, David Goldsmith wrote:

First, sorry for the long email.

I'm having a segmentation fault problem trying to use plot_date,