Esta sería una gran característica, pero AFAIK no está implementada en Matplotlib y probablemente sería difícil de implementar usted mismo debido a la forma en que se almacenan las cifras.
Sugeriría (a) procesar los datos por separado de la generación de la figura (que guarda los datos con un nombre único) y escribir un script de generación de figuras (cargando un archivo específico de los datos guardados) y editarlos como mejor le parezca o (b ) guarde como formato PDF / SVG / PostScript y edítelo en algún editor de figuras elegante como Adobe Illustrator (o Inkscape ).
EDITAR post Otoño de 2012 : como otros señalaron a continuación (aunque mencionaron aquí que esta es la respuesta aceptada), Matplotlib desde la versión 1.2 le permitió seleccionar cifras. Como indican las notas de la versión , es una función experimental y no admite guardar una figura en una versión de matplotlib y abrirla en otra. Por lo general, tampoco es seguro restaurar un pepinillo de una fuente que no sea de confianza.
Para compartir / editar gráficos posteriores (que primero requieren un procesamiento significativo de datos y es posible que deban modificarse meses después, por ejemplo, durante la revisión por pares para una publicación científica), todavía recomiendo el flujo de trabajo de (1) tener un script de procesamiento de datos que antes de generar un gráfico guarda los datos procesados (que entran en su diagrama) en un archivo, y (2) tiene un script de generación de diagrama separado (que usted ajusta según sea necesario) para recrear el diagrama. De esta manera, para cada trama, puede ejecutar rápidamente un script y volver a generarlo (y copiar rápidamente la configuración de la trama con nuevos datos). Dicho esto, el decapado de una figura podría ser conveniente para el análisis de datos a corto plazo / interactivo / exploratorio.
pickle
ahora funciona con figuras MPL, por lo que se puede hacer y parece funcionar razonablemente bien, casi como un archivo de figura ".fig" de Matlab. Vea mi respuesta a continuación (¿por ahora?) Para ver un ejemplo de cómo hacerlo.Acabo de descubrir cómo hacer esto. El "soporte de pickle experimental" mencionado por @pelson funciona bastante bien.
Prueba esto:
Después de su ajuste interactivo, guarde el objeto de figura como un archivo binario:
Más tarde, abra la figura y los ajustes deben guardarse y la interactividad de la GUI debe estar presente:
Incluso puede extraer los datos de los gráficos:
(Funciona para líneas, pcolor e imshow; pcolormesh funciona con algunos trucos para reconstruir los datos aplanados ).
Obtuve el excelente consejo de Guardar figuras de Matplotlib usando Pickle .
fuente
pickle
documentación indicaba que necesitamos configurar el entorno de manera similar a cuando el objeto fue encurtido (guardado), pero descubrí que no es necesarioimport matplotlib.pyplot as plt
al despegar (cargar): guarda las declaraciones de importación en el archivo encurtido .with open('FigureObject.fig.pickle', 'rb') as file: figx = pickle.load(file)
figx.show()
, debe llamar en suplt.show()
lugar, lo cual está bloqueando.A partir de Matplotlib 1.2, ahora tenemos soporte de pickle experimental . Pruébelo y vea si funciona bien para su caso. Si tiene algún problema, háganoslo saber en la lista de correo de Matplotlib o abriendo un problema en github.com/matplotlib/matplotlib .
fuente
PicklingError: Can't pickle <type '_macosx.GraphicsContext'>: it's not found as _macosx.GraphicsContext
.PicklingError
solo ocurre si llamasplt.show()
antes de hacer el pepinillo. Así que solo colocaplt.show()
despuéspickle.dump()
.fig.show()
no parece importar, tal vez ese error se solucionó. Puedo encurtir antes / despuésshow()
sin problema.¿Por qué no enviar el script de Python? Los archivos .fig de MATLAB requieren que el destinatario tenga MATLAB para mostrarlos, por lo que eso es equivalente a enviar un script de Python que requiere que se muestre Matplotlib.
Alternativamente (descargo de responsabilidad: aún no he probado esto), puede intentar encurtir la figura:
fuente
MyPlot.fig.pickle
archivo, conservando la capacidad posterior de ajustar la presentación del gráfico según sea necesario. Esto también es lo bueno de los.fig
archivos de Matlab . Especialmente útil cuando necesita cambiar el tamaño / relación de aspecto de una figura (para insertar en presentaciones / documentos).Buena pregunta. Aquí está el texto del documento de
pylab.save
:fuente
pylab.save
. De hecho, a partir del texto del documento, parece que uno no debería usarlo.Descubrí una forma relativamente simple (aunque un poco poco convencional) de guardar mis figuras de matplotlib. Funciona así:
con función
save_plot
definida así (versión simple para entender la lógica):o definir una función
save_plot
como esta (mejor versión que usa compresión zip para producir archivos de figuras más livianos):Esto hace que use un módulo
libscript
propio, que se basa principalmente en módulosinspect
yast
. Puedo intentar compartirlo en Github si se expresa interés (primero requeriría una limpieza y yo comenzaría con Github).La idea detrás de esta
save_plot
función ylibscript
módulo es buscar las instrucciones de Python que crean la figura (usando el móduloinspect
), analizarlas (usando el móduloast
) para extraer todas las variables, funciones y módulos en los que se basa la importación, extraerlos del contexto de ejecución y serializarlos. como instrucciones de Python (el código para las variables será comot=[0.0,2.0,0.01]
... y el código para los módulos será comoimport matplotlib.pyplot as plt
...) antepuesto a las instrucciones de la figura. Las instrucciones de Python resultantes se guardan como un script de Python cuya ejecución reconstruirá la figura original de matplotlib.Como puede imaginar, esto funciona bien para la mayoría (si no todas) las figuras de matplotlib.
fuente