Search code examples
pythonmatplotlibsmtplib

Matplotlib to smtplib


I'm wondering if I can send out a matplotlib pyplot through smtplib. What I mean is, after I plot this dataframe:

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>

I know I can see the plot using

plt.show()

but where is the object itself stored? Or am I misunderstanding something about matplotlib? Is there a way to convert it to a picture or html within python so I can send it through smtplib?


Solution

  • You can use figure.savefig() to save your plot to a file. An example where I output a plot to a file:

    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")
    

    Then just attach the image to your email (like the recipe in this answer).