Во-первых, я должен сказать, что я настоящий новичок в Python (и в самом программировании), так что это может быть глупый вопрос, но я не мог найти решение.Ошибка с plt.savefig в цикле
Я загружаю данные из трех разных CSV-файлов, затем делаю некоторые вычисления и, в конце концов, хочу сохранить 3 тепловых карты. Моя проблема заключается в экономии. Когда я использую plt.savefig('whatever.jpg')
, он, очевидно, сохраняет только последнюю тепловую карту в цикле. Я попытался изменить его на plt.savefig('{}.jpg'.format(i))
, но у меня есть ошибка, и я не знаю, как исправить. Буду признателен за любые намеки! (Python 3 из Anaconda)
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
instrumenty = ['gold','sp500','dax']
for i in instrumenty:
i = pd.read_csv(i+'_m.csv', sep=',')
i['Miesiąc'] = pd.DatetimeIndex(i['Data']).month
i['Rok'] = pd.DatetimeIndex(i['Data']).year
i['Zmiana']=i['Zamkniecie'].pct_change()
i_pt = i[1:].pivot_table(index='Rok',columns='Miesiąc',values='Zmiana')
sns.heatmap(i_pt, linewidths=1, cmap='PiYG')
plt.savefig('{}.png'.format(i))
plt.clf()
И ошибка:
FileNotFoundError Traceback (most recent call last)
<ipython-input-30-5729b6a0480f> in <module>()
14 i_pt = i[1:].pivot_table(index='Rok',columns='Miesiąc',values='Zmiana')
15 sns.heatmap(i_pt, linewidths=1, cmap='PiYG')
---> 16 plt.savefig('{}.png'.format(i))
17 plt.clf()
18
C:\Users\user\Anaconda3\lib\site-packages\matplotlib\pyplot.py in savefig(*args, **kwargs)
694 def savefig(*args, **kwargs):
695 fig = gcf()
--> 696 res = fig.savefig(*args, **kwargs)
697 fig.canvas.draw_idle() # need this if 'transparent=True' to reset colors
698 return res
C:\Users\user\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\user\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\user\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py in print_png(self, filename_or_obj, *args, **kwargs)
530 renderer.dpi = self.figure.dpi
531 if is_string_like(filename_or_obj):
--> 532 filename_or_obj = open(filename_or_obj, 'wb')
533 close = True
534 else:
Даже без plt.savefig я делаю что-то неправильно, потому что результат one strange chart with 3 legends вместо 3-х картах.
Попробуйте добавить 'plt.close()' 'после того, как plt.savefig (...) '. Кроме того, я думаю, что формат вывода по умолчанию для цифр matplotlib - 'png', но кто-то может исправить меня, если я ошибаюсь. – tmwilson26
Пожалуйста, уменьшите это до минимального рабочего примера, подумайте о простом графике и попытайтесь использовать 'savefig' один раз, показывая соответствующий вывод и сообщение об ошибке. Также укажите, какую версию python вы используете (Python 3 из Anaconda?). – oliversm
@ tmwilson26 К сожалению, я не помог. – Szymon