I want to embed a figure generated by python matplotlib into a html file with other content. Is that possible?
What I have thought is saving figures as png file and then use <img>
tag to refer to it.
Some code I was trying to use are like:
import matplotlib.pyplot as plt fig = plt.figure() #plot sth plt.savefig('test.png') html = 'Some html head' + '<img src=\'test.png\'>' + 'Some more html' with open('test.html','w') as f: f.write(html)
However, this will generate two files instead of one and I don't have a server to host the png file. Is that possible to embed the figure in the html? How do I do it in python.
Thank you.
Matplotlib Savefig will NOT overwrite old files.
In the current versions of the IPython notebook and jupyter notebook, it is not necessary to use the %matplotlib inline function. As, whether you call matplotlib. pyplot. show() function or not, the graph output will be displayed in any case.
show() . If you do not want to use inline plotting, just use %matplotlib instead of %matplotlib inline .
show() converts any Matplotlib plot to HTML and opens the figure in the web browser. mpld3. save_html(fig,'myfig. html') method saves figures to HTML files for archiving or uploading as an iframe to a website, etc.
You can write the image into a temporary file and encode it with base64 and then embed the encoded base64 image into your html. Most modern browsers will correctly render the image.
A short example modified from your code will be:
import matplotlib.pyplot as plt import base64 from io import BytesIO fig = plt.figure() #plot sth tmpfile = BytesIO() fig.savefig(tmpfile, format='png') encoded = base64.b64encode(tmpfile.getvalue()).decode('utf-8') html = 'Some html head' + '<img src=\'data:image/png;base64,{}\'>'.format(encoded) + 'Some more html' with open('test.html','w') as f: f.write(html)
You can convert the image using base64 encoding: https://docs.python.org/3/library/base64.html#base64.encodebytes
and then embed the encoded string in the html like so: How to display Base64 images in HTML?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With