[Matplotlib-devel] colorbar with date

elmar werling elmar at net4werling.de
Mon Sep 7 21:36:10 CEST 2015


found a solution



import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter, date2num

N = 50
df = pd.DataFrame({
           'x': np.random.randn(N),
           'y': np.random.randn(N),
           'z': pd.date_range(start='2015-01-01', periods=N, freq='D')})


fig, ax = plt.subplots()

smap = ax.scatter(df2.x, df2.y, s=50,
                   c=[date2num(i.date()) for i in df2.z])  # <==

cb = fig.colorbar(smap, orientation='vertical', shrink=0.9,
                   format=DateFormatter('%d %b %y'))       # <==

plt.show()



On 06.09.2015 17:55, elmar werling wrote:
> Hi all,
>
> try to make a colobar with date type data is causing a type error. Is
> there a solution?
>
> Any help is wellcome
> Elmar
>
>
> Python 3
> np_version : 1.9.2
> pd version : 0.16.2
> mpl.version: 1.4.3
>
> ###########################
> import numpy as np
> import pandas as pd
> import matplotlib.pyplot as plt
>
> N = 50
> df = pd.DataFrame({
>          'x': np.random.randn(N),
>          'y': np.random.randn(N),
>          'z': pd.date_range(start='2015-01-01', periods=N, freq='D')})
>
> fig, ax = plt.subplots()
> smap = ax.scatter(df.x, df.y, s=50, c=df.z)
> cb = plt.colorbar(smap)
> plt.show()
>
> ###########################
>
> ---------------------------------------------------------------------------
> TypeError                                 Traceback (most recent call last)
> <ipython-input-75-8c2abb81cdb2> in <module>()
>        1 fig, ax = plt.subplots()
>        2 smap = ax.scatter(df2.x, df2.y, s=50, c=df2.z)
> ----> 3 cb = plt.colorbar(smap)
>
> /home/elmar/anaconda3/envs/py3/lib/python3.4/site-packages/matplotlib/pyplot.py
> in colorbar(mappable, cax, ax, **kw)
>     2157         ax = gca()
>     2158
> -> 2159     ret = gcf().colorbar(mappable, cax = cax, ax=ax, **kw)
>     2160     draw_if_interactive()
>     2161     return ret
>
> /home/elmar/anaconda3/envs/py3/lib/python3.4/site-packages/matplotlib/figure.py
> in colorbar(self, mappable, cax, ax, use_gridspec, **kw)
>     1504                 cax, kw = cbar.make_axes(ax, **kw)
>     1505         cax.hold(True)
> -> 1506         cb = cbar.colorbar_factory(cax, mappable, **kw)
>     1507
>     1508         self.sca(current_ax)
>
> /home/elmar/anaconda3/envs/py3/lib/python3.4/site-packages/matplotlib/colorbar.py
> in colorbar_factory(cax, mappable, **kwargs)
>     1316         cb = ColorbarPatch(cax, mappable, **kwargs)
>     1317     else:
> -> 1318         cb = Colorbar(cax, mappable, **kwargs)
>     1319
>     1320     cid = mappable.callbacksSM.connect('changed',
> cb.on_mappable_changed)
>
> /home/elmar/anaconda3/envs/py3/lib/python3.4/site-packages/matplotlib/colorbar.py
> in __init__(self, ax, mappable, **kw)
>      892                 kw['alpha'] = mappable.get_alpha()
>      893
> --> 894             ColorbarBase.__init__(self, ax, **kw)
>      895
>      896     def on_mappable_changed(self, mappable):
>
> /home/elmar/anaconda3/envs/py3/lib/python3.4/site-packages/matplotlib/colorbar.py
> in __init__(self, ax, cmap, norm, alpha, values, boundaries,
> orientation, ticklocation, extend, spacing, ticks, format, drawedges,
> filled, extendfrac, extendrect, label)
>      319         # The rest is in a method so we can recalculate when
> clim changes.
>      320         self.config_axis()
> --> 321         self.draw_all()
>      322
>      323     def _extend_lower(self):
>
> /home/elmar/anaconda3/envs/py3/lib/python3.4/site-packages/matplotlib/colorbar.py
> in draw_all(self)
>      340         and do all the drawing.
>      341         '''
> --> 342         self._process_values()
>      343         self._find_range()
>      344         X, Y = self._mesh()
>
> /home/elmar/anaconda3/envs/py3/lib/python3.4/site-packages/matplotlib/colorbar.py
> in _process_values(self, b)
>      660             self.norm.vmin, self.norm.vmax =
> mtrans.nonsingular(self.norm.vmin,
>      661  self.norm.vmax,
> --> 662 expander=0.1)
>      663
>      664             b = self.norm.inverse(self._uniform_y(self.cmap.N +
> 1))
>
> /home/elmar/anaconda3/envs/py3/lib/python3.4/site-packages/matplotlib/transforms.py
> in nonsingular(vmin, vmax, expander, tiny, increasing)
>     2681     returns -*expander*, *expander*.
>     2682     '''
> -> 2683     if (not np.isfinite(vmin)) or (not np.isfinite(vmax)):
>     2684         return -expander, expander
>     2685     swapped = False
>
> TypeError: ufunc 'isfinite' not supported for the input types, and the
> inputs could not be safely coerced to any supported types according to
> the casting rule ''safe''



More information about the Matplotlib-devel mailing list