Hi Alex, Excellent, thanks! Using ipython is a solution that works for us.
Cheers, Bruno On Fri, 24 Feb 2017 at 10:54 Goodman, Alexander (398K) < [email protected]> wrote: > Hi Bruno, > > This is a known issue with matplotlib that's probably out of our control. > Essentially, figure drawing callbacks are handled differently depending on > whether or not your shell environment is ipython. I have described the > issue in more detail here: > > https://issues.apache.org/jira/browse/ZEPPELIN-1904 > > In my post I also gave a workaround, which is setting your > zeppelin.pyspark.python property value to ipython instead of python in your > interpreter settings. All of this of course assumes you have ipython. Let > me know if this helps. > > Thanks, > Alex > > On Fri, Feb 24, 2017 at 2:14 AM, Bruno Aranda <[email protected]> wrote: > > Hi, > > I am trying to use matplotlib to render some plots using the plot_date > function in PySpark, where the X axis are datetimes. With a sample code > like this one: > > ////// > > %pyspark > > import matplotlib.pyplot as plt > import matplotlib.dates as mdates > import pandas as pd > import numpy as np > > sx = pd.Series(np.random.randn(5)) > sy = pd.Series(['1487930047000', '1487930048000', '1487930049000', > '1487930050000', '1487930051000']) > > df = DataFrame({"value": sx, "time": sy}) > > # df = sqlContext.table("clipinParams").toPandas() > df['time'] = pd.to_datetime(df['time'],unit='ms') > > plt.plot_date(df['time'], df['value']) > plt.show() > plt.close() > > ////// > > However, it seems to fail every other run and we cannot get why. The > exception is the following: > > ////// > > Traceback (most recent call last): > File "/tmp/zeppelin_pyspark-6333777839230958463.py", line 346, in <module> > raise Exception(traceback.format_exc()) > Exception: Traceback (most recent call last): > File "/tmp/zeppelin_pyspark-6333777839230958463.py", line 334, in <module> > exec(code) > File "<stdin>", line 9, in <module> > File "/usr/local/lib64/python2.7/site-packages/matplotlib/pyplot.py", line > 3341, in plot_date > data=data, **kwargs) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/__init__.py", > line 1892, in inner > return func(ax, *args, **kwargs) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/axes/_axes.py", > line 1480, in plot_date > self.xaxis_date(tz) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/axes/_base.py", > line 3315, in xaxis_date > self.xaxis.axis_date(tz) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/axis.py", line > 1674, in axis_date > self.update_units(datetime.datetime(2009, 1, 1, 0, 0, 0, 0, tz)) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/axis.py", line > 1424, in update_units > self._update_axisinfo() > File "/usr/local/lib64/python2.7/site-packages/matplotlib/axis.py", line > 1442, in _update_axisinfo > self.set_major_locator(info.majloc) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/axis.py", line > 1543, in set_major_locator > self.stale = True > File "/usr/local/lib64/python2.7/site-packages/matplotlib/artist.py", line > 279, in stale > self.stale_callback(self, val) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/artist.py", line > 76, in _stale_axes_callback > self.axes.stale = val > File "/usr/local/lib64/python2.7/site-packages/matplotlib/artist.py", line > 279, in stale > self.stale_callback(self, val) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/figure.py", line > 56, in _stale_figure_callback > self.figure.stale = val > File "/usr/local/lib64/python2.7/site-packages/matplotlib/artist.py", line > 279, in stale > self.stale_callback(self, val) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/pyplot.py", line > 576, in _auto_draw_if_interactive > fig.canvas.draw_idle() > File "/usr/lib/zeppelin/interpreter/lib/python/backend_zinline.py", line > 132, in draw_idle > self.draw(*args, **kwargs) > File > "/usr/local/lib64/python2.7/site-packages/matplotlib/backends/backend_agg.py", > line 464, in draw > self.figure.draw(self.renderer) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/artist.py", line > 63, in draw_wrapper > draw(artist, renderer, *args, **kwargs) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/figure.py", line > 1143, in draw > renderer, self, dsu, self.suppressComposite) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/image.py", line > 139, in _draw_list_compositing_images > a.draw(renderer) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/artist.py", line > 63, in draw_wrapper > draw(artist, renderer, *args, **kwargs) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/axes/_base.py", > line 2409, in draw > mimage._draw_list_compositing_images(renderer, self, dsu) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/image.py", line > 139, in _draw_list_compositing_images > a.draw(renderer) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/artist.py", line > 63, in draw_wrapper > draw(artist, renderer, *args, **kwargs) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/axis.py", line > 1136, in draw > ticks_to_draw = self._update_ticks(renderer) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/axis.py", line > 969, in _update_ticks > tick_tups = [t for t in self.iter_ticks()] > File "/usr/local/lib64/python2.7/site-packages/matplotlib/axis.py", line > 912, in iter_ticks > majorLocs = self.major.locator() > File "/usr/local/lib64/python2.7/site-packages/matplotlib/dates.py", line > 983, in __call__ > self.refresh() > File "/usr/local/lib64/python2.7/site-packages/matplotlib/dates.py", line > 1003, in refresh > dmin, dmax = self.viewlim_to_dt() > File "/usr/local/lib64/python2.7/site-packages/matplotlib/dates.py", line > 760, in viewlim_to_dt > return num2date(vmin, self.tz), num2date(vmax, self.tz) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/dates.py", line > 401, in num2date > return _from_ordinalf(x, tz) > File "/usr/local/lib64/python2.7/site-packages/matplotlib/dates.py", line > 254, in _from_ordinalf > dt = datetime.datetime.fromordinal(ix).replace(tzinfo=UTC) > ValueError: ordinal must be >= 1 > > ////// > > Any ideas of things we can look at? > > Cheers, > > Bruno > > > > > -- > Alex Goodman > Data Scientist I > Science Data Modeling and Computing (398K) > Jet Propulsion Laboratory > California Institute of Technology > Tel: +1-818-354-6012 >
