Hi,
I've got data in terms of day numbers, and wish to plot it as a 2D
scatter plot, with the color denoting the day.
I'd like the colorbar to be annotated in Apr 7 type format...
I've tried the following code without success.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter,DayLocator
from matplotlib import cm
data = np.arange(24.)+700000.
x = np.random.rand(24)
y = np.random.rand(24)
fig = plt.figure()
ax = fig.add_subplot(111)
smap = ax.scatter(x,y,s=10,c=data,edgecolors='none',marker='o',cmap=cm.jet)
cb = fig.colorbar(smap,orientation='horizontal',shrink=0.7)
cax=cb.ax
cax.xaxis_date()
cax.xaxis.set_major_locator(DayLocator())
cax.xaxis.set_major_formatter(DateFormatter('%b %d'))
plt.show()
Any ideas on how to do this would be appreciated.
George Nurser.
The code fails with the trace
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/backends/backend_wx.pyc
in _onPaint(self, evt)
1154 drawDC = wx.PaintDC(self)
1155 if not self._isDrawn:
-> 1156 self.draw(drawDC=drawDC)
1157 else:
1158 self.gui_repaint(drawDC=drawDC)
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/backends/backend_wxagg.pyc
in draw(self, drawDC)
57 """
58 DEBUG_MSG("draw()", 1, self)
---> 59 FigureCanvasAgg.draw(self)
60
61 self.bitmap =
_convert_agg_to_wx_bitmap(self.get_renderer(), None)
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/backends/backend_agg.pyc
in draw(self)
386
387 self.renderer = self.get_renderer()
--> 388 self.figure.draw(self.renderer)
389
390 def get_renderer(self):
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/artist.pyc
in draw_wrapper(artist, renderer, *kl)
53 def draw_wrapper(artist, renderer, *kl):
54 before(artist, renderer)
---> 55 draw(artist, renderer, *kl)
56 after(artist, renderer)
57
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/figure.pyc
in draw(self, renderer)
770
771 # render the axes
--> 772 for a in self.axes: a.draw(renderer)
773
774 # render the figure text
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/artist.pyc
in draw_wrapper(artist, renderer, *kl)
53 def draw_wrapper(artist, renderer, *kl):
54 before(artist, renderer)
---> 55 draw(artist, renderer, *kl)
56 after(artist, renderer)
57
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/axes.pyc
in draw(self, renderer, inframe)
1759
1760 for zorder, i, a in dsu:
-> 1761 a.draw(renderer)
1762
1763 renderer.close_group('axes')
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/artist.pyc
in draw_wrapper(artist, renderer, *kl)
53 def draw_wrapper(artist, renderer, *kl):
54 before(artist, renderer)
---> 55 draw(artist, renderer, *kl)
56 after(artist, renderer)
57
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/axis.pyc
in draw(self, renderer, *args, **kwargs)
747 renderer.open_group(__name__)
748 interval = self.get_view_interval()
--> 749 for tick, loc, label in self.iter_ticks():
750 if tick is None: continue
751 if not mtransforms.interval_contains(interval,
loc): continue
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/axis.pyc
in iter_ticks(self)
688 Iterate through all of the major and minor ticks.
689 """
--> 690 majorLocs = self.major.locator()
691 majorTicks = self.get_major_ticks(len(majorLocs))
692 self.major.formatter.set_locs(majorLocs)
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/dates.pyc
in __call__(self)
530 self.rule.set(dtstart=start, until=stop)
531 dates = self.rule.between(dmin, dmax, True)
--> 532 return self.raise_if_exceeds(date2num(dates))
533
534 def _get_unit(self):
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/ticker.pyc
in raise_if_exceeds(self, locs)
680 'raise a RuntimeError if Locator attempts to create
more than MAXTICKS locs'
681 if len(locs)>=self.MAXTICKS:
--> 682 raise RuntimeError('Locator attempting to generate
%d ticks from %s to %s: exceeds Locator.MAXTICKS'%(len(locs), locs[0],
locs[-1]))
683
684 return locs
RuntimeError: Locator attempting to generate 3654 ticks from 730120.0
to 733773.0: exceeds Locator.MAXTICKS