Se você estiver usando matplotlibe tentando obter bons números em um documento de látex, salve como um eps. Especificamente, tente algo assim depois de executar os comandos para plotar a imagem:
plt.savefig('destination_path.eps', format='eps')
Descobri que os arquivos eps funcionam melhor e o dpiparâmetro é o que realmente os faz parecer bem em um documento.
ATUALIZAR:
Para especificar a orientação da figura antes de salvar, basta chamar o seguinte antes da plt.savefigchamada, mas depois de criar o gráfico (presumindo que você tenha plotado usando eixos com o nome ax):
Onde elevation_angleé um número (em graus) especificando o ângulo polar (abaixo do eixo vertical z) e azimuthal_angleespecifica o ângulo azimutal (em torno do eixo z).
Acho que é mais fácil determinar esses valores primeiro traçando a imagem e depois girando-a e observando os valores atuais dos ângulos aparecerem na parte inferior da janela, logo abaixo do gráfico real. Lembre-se de que as posições x, y, z aparecem por padrão, mas são substituídas pelos dois ângulos quando você começa a clicar, arrastar e girar a imagem.
@ spencerlon2 e se eu quiser alterar a orientação da figura antes de salvar?
poeira em
13
Por que precisamos do parâmetro DPI? O eps não é um formato vetorial?
mkvoya
1
Boa observação - DPI não é necessário para formatos de vetor como svg, pdf, eps
spencerlyon2
Você pode omitir format='eps'se quiser. Nesse caso, o formato é inferido do nome do arquivo.
timgeb
72
Só para adicionar meus resultados, também usando matplotlib.
.eps deixou todo o meu texto em negrito e removeu a transparência. .svg me deu imagens de alta resolução que realmente se pareciam com o meu gráfico.
import matplotlib.pyplot as plt
fig, ax = plt.subplots()# Do the plot code
fig.savefig('myimage.svg', format='svg', dpi=1200)
Usei 1200 dpi porque muitas revistas científicas exigem imagens em 1200/600/300 dpi dependendo do que a imagem é. Converta para o dpi desejado e formate em GiMP ou Inkscape.
EDIT: Obviamente, o dpi não importa, pois .svg são gráficos vetoriais e têm "resolução infinita".
O DPI importa muito quando usamos imshow(..)em algum lugar da figura. Esses bitmaps são rasterizados à medida que são incorporados ao SVG. Com o DPI padrão, os resultados são ainda piores do que vemos na tela, definitivamente inadequados para publicações.
Evgeni Sergeev
Também recomendo fortemente o Scour ( github.com/scour-project/scour ) para reduzir o tamanho do arquivo do seu svg. Na configuração mais agressiva, posso reduzir o tamanho do arquivo para 50% do original - 5% se usar o formato compactado .svgz.
grofte
8
Ok, achei a resposta de spencerlyon2 funcionando, no entanto, caso alguém se descobrisse sem saber o que fazer com aquela linha, eu tinha que fazer desta forma:
Caso você esteja trabalhando com plotagens do mar , em vez de matplotlib, você pode salvar uma imagem .png como esta:
Suponhamos que você tenha um matrixobjeto (pandas ou entorpecidos) e queira obter um mapa de calor:
import seaborn as sb
image = sb.heatmap(matrix)# this gets you the heatmap
image.figure.savefig("C:/Your/Path/ ... /your_image.png")# this saves it
Este código é compatível com a versão mais recente do seaborn. Outros códigos em torno de stackoverflow funcionaram apenas para versões anteriores.
Outra forma de que gosto é esta. Eu defino o tamanho da próxima imagem da seguinte maneira:
plt.subplots(figsize=(15,15))
E, mais tarde, ploto a saída no console, de onde posso copiar e colar onde quiser. (Uma vez que o mar é construído sobre matplotlib, não haverá problema.)
Você pode salvar para um número 1920x1080 (ou 1080p) usando:
fig = plt.figure(figsize=(19.20,10.80))
Você também pode subir ou descer muito. As soluções acima funcionam bem para impressão, mas atualmente você quer que a imagem criada vá para um formato PNG / JPG ou apareça em um formato de tela ampla.
format='eps'
se quiser. Nesse caso, o formato é inferido do nome do arquivo.Só para adicionar meus resultados, também usando matplotlib.
.eps deixou todo o meu texto em negrito e removeu a transparência. .svg me deu imagens de alta resolução que realmente se pareciam com o meu gráfico.
Usei 1200 dpi porque muitas revistas científicas exigem imagens em 1200/600/300 dpi dependendo do que a imagem é. Converta para o dpi desejado e formate em GiMP ou Inkscape.
EDIT: Obviamente, o dpi não importa, pois .svg são gráficos vetoriais e têm "resolução infinita".
fonte
imshow(..)
em algum lugar da figura. Esses bitmaps são rasterizados à medida que são incorporados ao SVG. Com o DPI padrão, os resultados são ainda piores do que vemos na tela, definitivamente inadequados para publicações.Ok, achei a resposta de spencerlyon2 funcionando, no entanto, caso alguém se descobrisse sem saber o que fazer com aquela linha, eu tinha que fazer desta forma:
fonte
Caso você esteja trabalhando com plotagens do mar , em vez de matplotlib, você pode salvar uma imagem .png como esta:
Suponhamos que você tenha um
matrix
objeto (pandas ou entorpecidos) e queira obter um mapa de calor:Este código é compatível com a versão mais recente do seaborn. Outros códigos em torno de stackoverflow funcionaram apenas para versões anteriores.
Outra forma de que gosto é esta. Eu defino o tamanho da próxima imagem da seguinte maneira:
E, mais tarde, ploto a saída no console, de onde posso copiar e colar onde quiser. (Uma vez que o mar é construído sobre matplotlib, não haverá problema.)
fonte
Você pode salvar para um número 1920x1080 (ou 1080p) usando:
Você também pode subir ou descer muito. As soluções acima funcionam bem para impressão, mas atualmente você quer que a imagem criada vá para um formato PNG / JPG ou apareça em um formato de tela ampla.
fonte