Esse seria um ótimo recurso, mas o AFAIK não está implementado no Matplotlib e provavelmente seria difícil de se implementar devido à maneira como os números são armazenados.
Sugiro que (a) separe o processamento dos dados da geração da figura (que salva os dados com um nome exclusivo) e escreva um script de geração da figura (carregando um arquivo especificado dos dados salvos) e edite como achar melhor ou (b ) salve como formato PDF / SVG / PostScript e edite em algum editor de figuras sofisticadas, como o Adobe Illustrator (ou Inkscape ).
EDIT após o outono de 2012 : Como outros apontaram abaixo (apesar de mencionar aqui como esta é a resposta aceita), o Matplotlib desde a versão 1.2 permitiu que você capturasse números. Como as notas de versão indicam , é um recurso experimental e não suporta salvar uma figura em uma versão do matplotlib e abrir em outra. Também geralmente não é seguro restaurar um picles de uma fonte não confiável.
Para compartilhar / editar parcelas posteriores (que requerem processamento significativo de dados primeiro e que podem precisar ser ajustados meses depois, digamos durante a revisão por pares para uma publicação científica), ainda recomendo que o fluxo de trabalho de (1) tenha um script de processamento de dados que antes de gerar uma plotagem salva os dados processados (que entram em sua plotagem) em um arquivo e (2) tem um script de geração de plotagem separado (que você ajusta conforme necessário) para recriar a plotagem. Dessa forma, para cada plotagem, você pode executar rapidamente um script e gerá-lo novamente (e copiar rapidamente as configurações da plotagem com novos dados). Dito isto, escolher um número pode ser conveniente para análises de dados de curto prazo / interativas / exploratórias.
pickle
agora funciona com figuras MPL, portanto, isso pode ser feito e parece funcionar razoavelmente - quase como um arquivo de figura ".fig" do Matlab. Veja minha resposta abaixo (por enquanto?) Para um exemplo de como fazê-lo.Acabei de descobrir como fazer isso. O "suporte experimental de picles" mencionado por @pelson funciona muito bem.
Tente o seguinte:
Após os ajustes interativos, salve o objeto de figura como um arquivo binário:
Posteriormente, abra a figura e os ajustes devem ser salvos e a interatividade da GUI deve estar presente:
Você pode até extrair os dados dos gráficos:
(Ele funciona para linhas, pcolor e imshow - o pcolormesh trabalha com alguns truques para reconstruir os dados achatados .)
Recebi a excelente dica de Saving Matplotlib Figures Using Pickle .
fonte
pickle
documentação afirmava que precisamos configurar o ambiente de maneira semelhante a quando o objeto foi capturado (salvo), mas descobri que você não precisa fazer oimport matplotlib.pyplot as plt
cancelamento (carregamento) - ele salva as instruções de importação no arquivo capturado .with open('FigureObject.fig.pickle', 'rb') as file: figx = pickle.load(file)
figx.show()
, você deve ligarplt.show()
, o que está bloqueando.A partir do Matplotlib 1.2, agora temos suporte experimental a picles . Experimente e veja se funciona bem para o seu caso. Se você tiver algum problema, informe-nos na lista de discussão do Matplotlib ou abrindo um problema em github.com/matplotlib/matplotlib .
fonte
PicklingError: Can't pickle <type '_macosx.GraphicsContext'>: it's not found as _macosx.GraphicsContext
.PicklingError
ocorre apenas se você ligarplt.show()
antes de fazer o pickle. Então, basta colocarplt.show()
depoispickle.dump()
.fig.show()
não parece importar - talvez esse bug tenha sido corrigido. Posso conservar antes / depoisshow()
sem problemas.Por que não apenas enviar o script Python? Os arquivos .fig do MATLAB exigem que o destinatário tenha o MATLAB para exibi-los, então isso é equivalente ao envio de um script Python que exige que o Matplotlib seja exibido.
Como alternativa (isenção de responsabilidade: ainda não tentei isso), você pode tentar escolher a figura:
fonte
MyPlot.fig.pickle
arquivo - mantendo a capacidade posterior de ajustar a apresentação da plotagem conforme necessário. Isso também é ótimo nos.fig
arquivos do Matlab . Especialmente útil quando você precisa alterar o tamanho / proporção de uma figura (para inserir em apresentações / trabalhos).Boa pergunta. Aqui está o texto do documento de
pylab.save
:fonte
pylab.save
. De fato, pelo texto do documento, parece que não se deve usá-lo.Eu descobri uma maneira relativamente simples (ainda que pouco convencional) de salvar meus números do matplotlib. Funciona assim:
com função
save_plot
definida assim (versão simples para entender a lógica):ou definindo uma função
save_plot
como esta (versão melhorada usando a compactação zip para produzir arquivos de figuras mais leves):Isso faz uso de um módulo
libscript
próprio, que depende principalmente de módulosinspect
east
. Posso tentar compartilhá-lo no Github se o interesse for manifestado (primeiro seria necessário limpar e eu começar o Github).A idéia por trás dessa
save_plot
função elibscript
módulo é buscar as instruções python que criam a figura (usando o móduloinspect
), analisá-las (usando o móduloast
) para extrair todas as variáveis, funções e módulos nos quais a importação depende, extraí-las do contexto de execução e serializá-las como instruções python (o código para variáveis será comot=[0.0,2.0,0.01]
... e o código para módulos será comoimport matplotlib.pyplot as plt
...) anexado às instruções da figura. As instruções python resultantes são salvas como um script python cuja execução reconstruirá a figura original do matplotlib.Como você pode imaginar, isso funciona bem para a maioria (senão todas) das figuras do matplotlib.
fonte