2017-04-19 2 views
-2

Ich habe Probleme beim Speichern einer Reihe von zwei Seaborn Violin-Plots und eine normale Matplotlib-Plot, die jedes Mal, wenn mein Code über eine Schleife iteriert.Ausgabe Plotten Seaborn und Matplotlib Figuren mit Schleife

Mein Code ist:

for symbol in symbol_list: 

    <DO SOMETHING - CREATE PANDAS DATAFRAME NAMED "df"> 

    img = sns.violinplot(x=df['Onside'].dropna().astype(float)) 
    fig = img.get_figure() 
    fig.savefig(symbol+" Onside Violin Plot.png") 
    fig.clf() 

    sns.violinplot(x=df['Offside'].dropna().astype(float)) 
    fig = img.get_figure() 

    fig.savefig(symbol+" Offside Violin Plot.png") 
    fig.clf() 


    plt.figure(1) 
    plt.subplot(211) 
    plt.hist(df['Onside'],bins=50,alpha=0.5,label="Onside") 
    plt.hist(df['Offside'],bins=50,alpha=0.5,label="Offside") 
    plt.legend(loc='best') 
    plt.xlabel("Pips") 
    plt.ylabel("Number of Trades") 

    plt.subplot(212) 
    plt.bar(df.index,df['Offside'],color='r',width=0.5) 
    plt.bar(df.index,df['Onside'],color='blue',width=0.5) 
    plt.savefig(symbol+'_Onside_Offside') 
    plt.plot() 

Es läuft korrekt auf der ersten Iteration durch die Schleife, aber auf den zweiten gehen um bekomme ich folgende Fehlermeldung:

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-51-269b21e53a2f> in <module>() 
    112  img = sns.violinplot(x=df['Onside'].dropna().astype(float))#.figure.savefig(symbol+" Onside Violin Plot.png") 
    113  fig = img.get_figure() 
--> 114  fig.savefig(symbol+" Onside Violin Plot.png") 
    115  fig.clf() 
    116 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\figure.py in savefig(self, *args, **kwargs) 
    1561    self.set_frameon(frameon) 
    1562 
-> 1563   self.canvas.print_figure(*args, **kwargs) 
    1564 
    1565   if frameon: 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\backend_bases.py in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs) 
    2230     orientation=orientation, 
    2231     bbox_inches_restore=_bbox_inches_restore, 
-> 2232     **kwargs) 
    2233   finally: 
    2234    if bbox_inches and restore_bbox: 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py in print_png(self, filename_or_obj, *args, **kwargs) 
    525 
    526  def print_png(self, filename_or_obj, *args, **kwargs): 
--> 527   FigureCanvasAgg.draw(self) 
    528   renderer = self.get_renderer() 
    529   original_dpi = renderer.dpi 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py in draw(self) 
    472 
    473   try: 
--> 474    self.figure.draw(self.renderer) 
    475   finally: 
    476    RendererAgg.lock.release() 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs) 
    60  def draw_wrapper(artist, renderer, *args, **kwargs): 
    61   before(artist, renderer) 
---> 62   draw(artist, renderer, *args, **kwargs) 
    63   after(artist, renderer) 
    64 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\figure.py in draw(self, renderer) 
    1157   dsu.sort(key=itemgetter(0)) 
    1158   for zorder, a, func, args in dsu: 
-> 1159    func(*args) 
    1160 
    1161   renderer.close_group('figure') 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs) 
    60  def draw_wrapper(artist, renderer, *args, **kwargs): 
    61   before(artist, renderer) 
---> 62   draw(artist, renderer, *args, **kwargs) 
    63   after(artist, renderer) 
    64 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in draw(self, renderer, inframe) 
    2317 
    2318   for zorder, a in dsu: 
-> 2319    a.draw(renderer) 
    2320 
    2321   renderer.close_group('axes') 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs) 
    60  def draw_wrapper(artist, renderer, *args, **kwargs): 
    61   before(artist, renderer) 
---> 62   draw(artist, renderer, *args, **kwargs) 
    63   after(artist, renderer) 
    64 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\axis.py in draw(self, renderer, *args, **kwargs) 
    1106   renderer.open_group(__name__) 
    1107 
-> 1108   ticks_to_draw = self._update_ticks(renderer) 
    1109   ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw, 
    1110                 renderer) 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\axis.py in _update_ticks(self, renderer) 
    949 
    950   interval = self.get_view_interval() 
--> 951   tick_tups = [t for t in self.iter_ticks()] 
    952   if self._smart_bounds: 
    953    # handle inverted limits 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\axis.py in <listcomp>(.0) 
    949 
    950   interval = self.get_view_interval() 
--> 951   tick_tups = [t for t in self.iter_ticks()] 
    952   if self._smart_bounds: 
    953    # handle inverted limits 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\axis.py in iter_ticks(self) 
    892   Iterate through all of the major and minor ticks. 
    893   """ 
--> 894   majorLocs = self.major.locator() 
    895   majorTicks = self.get_major_ticks(len(majorLocs)) 
    896   self.major.formatter.set_locs(majorLocs) 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\dates.py in __call__(self) 
    1005  def __call__(self): 
    1006   'Return the locations of the ticks' 
-> 1007   self.refresh() 
    1008   return self._locator() 
    1009 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\dates.py in refresh(self) 
    1025  def refresh(self): 
    1026   'Refresh internal information based on current limits.' 
-> 1027   dmin, dmax = self.viewlim_to_dt() 
    1028   self._locator = self.get_locator(dmin, dmax) 
    1029 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\dates.py in viewlim_to_dt(self) 
    769    vmin, vmax = vmax, vmin 
    770 
--> 771   return num2date(vmin, self.tz), num2date(vmax, self.tz) 
    772 
    773  def _get_unit(self): 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\dates.py in num2date(x, tz) 
    417   tz = _get_rc_timezone() 
    418  if not cbook.iterable(x): 
--> 419   return _from_ordinalf(x, tz) 
    420  else: 
    421   x = np.asarray(x) 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\dates.py in _from_ordinalf(x, tz) 
    269 
    270  ix = int(x) 
--> 271  dt = datetime.datetime.fromordinal(ix).replace(tzinfo=UTC) 
    272 
    273  remainder = float(x) - ix 

ValueError: ordinal must be >= 1 

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\IPython\core\formatters.py in __call__(self, obj) 
    305     pass 
    306    else: 
--> 307     return printer(obj) 
    308    # Finally look for special method names 
    309    method = get_real_method(obj, self.print_method) 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\IPython\core\pylabtools.py in <lambda>(fig) 
    225 
    226  if 'png' in formats: 
--> 227   png_formatter.for_type(Figure, lambda fig: print_figure(fig, 'png', **kwargs)) 
    228  if 'retina' in formats or 'png2x' in formats: 
    229   png_formatter.for_type(Figure, lambda fig: retina_figure(fig, **kwargs)) 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\IPython\core\pylabtools.py in print_figure(fig, fmt, bbox_inches, **kwargs) 
    117 
    118  bytes_io = BytesIO() 
--> 119  fig.canvas.print_figure(bytes_io, **kw) 
    120  data = bytes_io.getvalue() 
    121  if fmt == 'svg': 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\backend_bases.py in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs) 
    2178      orientation=orientation, 
    2179      dryrun=True, 
-> 2180      **kwargs) 
    2181     renderer = self.figure._cachedRenderer 
    2182     bbox_inches = self.figure.get_tightbbox(renderer) 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py in print_png(self, filename_or_obj, *args, **kwargs) 
    525 
    526  def print_png(self, filename_or_obj, *args, **kwargs): 
--> 527   FigureCanvasAgg.draw(self) 
    528   renderer = self.get_renderer() 
    529   original_dpi = renderer.dpi 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py in draw(self) 
    472 
    473   try: 
--> 474    self.figure.draw(self.renderer) 
    475   finally: 
    476    RendererAgg.lock.release() 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs) 
    60  def draw_wrapper(artist, renderer, *args, **kwargs): 
    61   before(artist, renderer) 
---> 62   draw(artist, renderer, *args, **kwargs) 
    63   after(artist, renderer) 
    64 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\figure.py in draw(self, renderer) 
    1157   dsu.sort(key=itemgetter(0)) 
    1158   for zorder, a, func, args in dsu: 
-> 1159    func(*args) 
    1160 
    1161   renderer.close_group('figure') 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs) 
    60  def draw_wrapper(artist, renderer, *args, **kwargs): 
    61   before(artist, renderer) 
---> 62   draw(artist, renderer, *args, **kwargs) 
    63   after(artist, renderer) 
    64 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in draw(self, renderer, inframe) 
    2317 
    2318   for zorder, a in dsu: 
-> 2319    a.draw(renderer) 
    2320 
    2321   renderer.close_group('axes') 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs) 
    60  def draw_wrapper(artist, renderer, *args, **kwargs): 
    61   before(artist, renderer) 
---> 62   draw(artist, renderer, *args, **kwargs) 
    63   after(artist, renderer) 
    64 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\axis.py in draw(self, renderer, *args, **kwargs) 
    1106   renderer.open_group(__name__) 
    1107 
-> 1108   ticks_to_draw = self._update_ticks(renderer) 
    1109   ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw, 
    1110                 renderer) 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\axis.py in _update_ticks(self, renderer) 
    949 
    950   interval = self.get_view_interval() 
--> 951   tick_tups = [t for t in self.iter_ticks()] 
    952   if self._smart_bounds: 
    953    # handle inverted limits 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\axis.py in <listcomp>(.0) 
    949 
    950   interval = self.get_view_interval() 
--> 951   tick_tups = [t for t in self.iter_ticks()] 
    952   if self._smart_bounds: 
    953    # handle inverted limits 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\axis.py in iter_ticks(self) 
    892   Iterate through all of the major and minor ticks. 
    893   """ 
--> 894   majorLocs = self.major.locator() 
    895   majorTicks = self.get_major_ticks(len(majorLocs)) 
    896   self.major.formatter.set_locs(majorLocs) 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\dates.py in __call__(self) 
    1005  def __call__(self): 
    1006   'Return the locations of the ticks' 
-> 1007   self.refresh() 
    1008   return self._locator() 
    1009 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\dates.py in refresh(self) 
    1025  def refresh(self): 
    1026   'Refresh internal information based on current limits.' 
-> 1027   dmin, dmax = self.viewlim_to_dt() 
    1028   self._locator = self.get_locator(dmin, dmax) 
    1029 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\dates.py in viewlim_to_dt(self) 
    769    vmin, vmax = vmax, vmin 
    770 
--> 771   return num2date(vmin, self.tz), num2date(vmax, self.tz) 
    772 
    773  def _get_unit(self): 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\dates.py in num2date(x, tz) 
    417   tz = _get_rc_timezone() 
    418  if not cbook.iterable(x): 
--> 419   return _from_ordinalf(x, tz) 
    420  else: 
    421   x = np.asarray(x) 

C:\Users\stuart.jamieson\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\dates.py in _from_ordinalf(x, tz) 
    269 
    270  ix = int(x) 
--> 271  dt = datetime.datetime.fromordinal(ix).replace(tzinfo=UTC) 
    272 
    273  remainder = float(x) - ix 

ValueError: ordinal must be >= 1 

Könnte jemand bitte darauf hin, wo ich falsch liege?

Ich nehme an, dass es etwas mit der "plt" -Figur zu tun hat, die nicht richtig gelöscht wird und deshalb versucht der Code zwei verschiedene Indizes auf der x-Achse der gleichen Figur zu zeichnen, daher muss die "Ordinalzahl> = 1" sein Error.

Bin ich im rechten Ballpark?

+0

Tolles Zeug, das funktioniert..danke! – s666

Antwort

1

Sie müssen die Abbildung zuerst in der Schleife löschen, andernfalls wird der neue Inhalt mit der alten Abbildung aus dem vorherigen Schleifenschritt dargestellt.

So können Sie

plt.gcf().clf() 

zu Beginn der Schleife hinzuzufügen.

Verwandte Themen