No olvides que en las ciencias un error suele tener más de una resoluciones, así que aquí mostraremos la mejor y más eficiente.
Solución:
Esto es lo que encontré en dos enlaces diferentes en la web, que funcionó perfectamente para mí. Matplotlib permite guardar archivos png, que es lo que uso aquí:
from PIL import Image
file_in = "image.png"
img = Image.open(file_in)
file_out = 'test1.bmp'
print len(img.split()) # test
if len(img.split()) == 4:
# prevent IOError: cannot write mode RGBA as BMP
r, g, b, a = img.split()
img = Image.merge("RGB", (r, g, b))
img.save(file_out)
else:
img.save(file_out)
from xlwt import Workbook
w = Workbook()
ws = w.add_sheet('Image')
ws.insert_bitmap(file_out, 0, 0)
w.save('images.xls')
La parte de la imagen del código es de la respuesta de Ene Uran aquí http://www.daniweb.com/software-development/python/threads/253957/converting-an-image-file-png-to-a-bitmap-file.
El xlwt es simplemente la documentación de xlwt que encontré en http://www.simplistix.co.uk/presentations/python-excel.pdf.
¡Openpyxl en realidad admite la incrustación de imágenes y podría funcionar mejor para aquellos que usan archivos .png o .xlsx existentes! El siguiente código agrega una imagen a la celda A1 de input.xlsx y guarda el archivo como output.xlsx.
import matplotlib.pyplot as plt
import openpyxl
# Your plot generation code here...
plt.savefig("myplot.png", dpi = 150)
wb = openpyxl.load_workbook('input.xlsx')
ws = wb.active
img = openpyxl.drawing.Image('myplot.png')
img.anchor(ws.cell('A1'))
ws.add_image(img)
wb.save('output.xlsx')
EDITAR junio de 2020: Me han informado que openpyxl ha cambiado desde el momento de escribir este artículo. La línea 7 debe ser:
img = openpyxl.drawing.image.Image('myplot.png')
Hay una .imagen adicional allí ahora.
Esto funcionó para mí:
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
ws = wb.active
img = openpyxl.drawing.image.Image('myplot.png')
ws.add_image(ws.cell('A1'))
ws.save('output.xlsx')
Si sostienes alguna perplejidad y forma de prosperar nuestro post te mencionamos dejar un informe y con placer lo interpretaremos.