2013-09-12 5 views
5

Мне интересно, могу ли я отправить макет plplllib через smtplib. То, что я имею в виду, после того, как я сюжет этот dataframe:Python Matplotlib to smtplib

In [3]: dfa 
Out[3]: 
      day  imps clicks 
70 2013-09-09 90739468 74609 
69 2013-09-08 90945581 72529 
68 2013-09-07 91861855 70869 

In [6]: dfa.plot() 
Out[6]: <matplotlib.axes.AxesSubplot at 0x3f24da0> 

Я знаю, что я могу видеть сюжет, используя

plt.show() 

но где сам объект хранится? Или я что-то недопонимаю о matplotlib? Есть ли способ преобразовать его в изображение или html внутри python, чтобы я мог отправить его через smtplib? Благодаря!

ответ

4

Вы можете использовать figure.savefig(), чтобы сохранить ваш участок в файле. Пример, в котором я выходной участок в файл:

fig = plt.figure()  
ax = fig.add_subplot(111) 

# Need to do this so we don't have to worry about how many lines we have - 
# matplotlib doesn't like one x and multiple ys, so just repeat the x 
lines = [] 
for y in ys: 
    lines.append(x) 
    lines.append(y) 

ax.plot(*lines) 

fig.savefig("filename.png") 

Тогда просто прикрепить изображение к вашей электронной почте (как в recipe in this answer).

+2

Да, это идеально !! Я просмотрел google, но Stack Overflow снова побеждает. –

10

Это также можно сделать все, что в памяти сохранения в буфере BytesIO, а затем подачу полезной нагрузки с ним:

buf = io.BytesIO() 
plt.savefig(buf, format = 'png') 
buf.seek(0) 

mail = MIMEMultipart() 
... 
part = MIMEBase('application', "octet-stream") 
part.set_payload(buf.read()) 
Encoders.encode_base64(part) 
part.add_header('Content-Disposition', 'attachment; filename="%s"' % 'anything.png') 
mail.attach(part) 
+3

Обратите внимание, что «anything.png» - это просто имя, указанное в почтовом вложении, а не имя в файловой системе. Это может быть все, что вы выберете. –

+1

Это лучше имо. Действительно ли это сохраняет операцию ввода-вывода файла? – omegacore

Смежные вопросы