2011-11-26 112 views
14

Estoy buscando exportar mi parcela MATLAB como una figura de alta calidad. Específicamente, me gustaría guardarlo como un formato de archivo basado en vectores como EPS o SVG.MATLAB y figuras EPS de alta calidad

I have tried print and saveas commands: 
saveas(h,'myFileName','epsc2'); 
print('-r150','-depsc2', 'myFilename'); 

En todas las ocasiones esto produce piezas de mala calidad de la gráfica, a pesar de las etiquetas de los ejes son de hecho vectorial. ¿Por qué MatLab hace una representación horrible antes de ponerla en una EPS?

Ejemplo de mala parcela calidad aquí: http://users.ox.ac.uk/~pemb2372/myFileName.eps

Editar: Es también digno de mención que si utiliza un Mac visualización de un archivo EPS de Matlab, app 'Vista previa' puede representar el contenido gráfico interior rasterizada y mala calidad, dejando el eje y las etiquetas vectorizadas y de alta calidad. Esto es muy engañoso, pero cuando abre dicho archivo EPS en, por ejemplo, Inkscape, la calidad es realmente vectorial y bastante alta.

Editar 2: Mi cuenta de alojamiento de la universidad ha expirado, por lo que ya no se puede ver la figura. Baste decir que mostró una trama de estilo ráster de mala calidad dentro de bellas líneas, marcas y etiquetas de eje de alta calidad.

+7

No puedo explicar "por qué" Matlab tiene características de inventario tan deficientes, pero es posible que desee probar [export_fig] (https://sites.google.com/site/oliverwoodford/software/export_fig). Está disponible en Matlab File Exchange y me ha ayudado mucho. También necesitará instalar ghostscript si aún no lo tiene. – aganders3

+0

+1 para export_fig. –

+0

Ok gracias - Lo investigaré e informaré – jtromans

Respuesta

9

Matlab puede exportar a PDF con mejor calidad que EPS, pero con sus propias advertencias de establecer márgenes decentes y tamaños de fuente.

editar: Los ejemplos son similares al caso de EPS como se explicó en la ayuda de, por ejemplo, print:

saveas(gcf,'filename.pdf') 

o

print('-dpdf','filename.pdf') 

También puede ser que desee echar un vistazo a las PaperSize, PaperPosition y PaperUnits propiedades de la figura (por medio de los set y get funciones).

editar: Otra opción es usar una de las funciones disponibles en FileExchange, como las mencionadas por @ user664303 a continuación. Mi favorito personal para usar con LaTeX es matlab2tikz para el cual se puede obtener la última versión en GitHub. Junto con la biblioteca external de TikZ, creo que esto ofrece algunos de los gráficos más bonitos. Probablemente también es mejor hablar de que he estado involucrado activamente en el proyecto matlab2tikz desde 2012.

+0

¿Eres capaz de dar un ejemplo? – jtromans

+0

Agregué algunos pequeños ejemplos, nada más, ya que son prácticamente idénticos a la carcasa EPS. – Egon

+0

Aunque es tonto, pensé que podría valer la pena compartir este nuget de conocimiento. Parte de la razón por la que tuve problemas con este problema fue que la 'Vista previa' en Mac OS X no representaba las imágenes correctamente. Esto los hizo ver aún peor y agravó mis problemas. ¡Lección, use un editor de imágenes adecuado para sus archivos anteriores! – jtromans

11

La función export_fig en el intercambio de archivos MATLAB es una manera razonablemente fiable de exportación con precisión figuras a EPS y PDF (así como de mapa de bits formatos) en MATLAB.

La función plot2svg, también del intercambio de archivos, le permite exportar en formato svg. Proporciona algunos beneficios adicionales, como la posibilidad de exportar objetos de parche translúcidos en formato vectorial.

Se proporciona una comparación de los métodos de exportación en este blog post.

+2

+1 para export_fig. – carlosdc

+0

'export_fig' es el jefe. –

12

Pensé que compartiría el problema que tenía, y cómo lo superé ...

Estaba obteniendo resultados terribles porque tenía el renderizador incorrecto configurado por defecto. En mi startup.m, tuve el renderizador zbuffer habilitado. Este es un ejemplo de salida de eps.

Crop of output eps

me hizo que la producción de EPS con: print(gcf,'-depsc2','filename.eps'). Este eps está tan obviamente rasterizado. Me enoja con matlab. Luego, tuve una idea genial: quizás mi procesador predeterminado zbuffer esté interfiriendo con el proceso de guardar imágenes. Por lo tanto, la adición de la línea:

set(gcf,'renderer','painters') 

y ejecutar el comando de impresión como antes, aquí está la salida:

Crop of second output eps

Tenga en cuenta que acabo de tomar capturas de pantalla de los archivos de salida EPS al 100%. Y puedo confirmar que la segunda imagen es en realidad vector. Aquí hay una buena pregunta/explicación sobre cómo elegir Renderers en MATLAB.

+1

Gracias por compartir. ¡Este problema básico realmente no debería estar causando tantos dolores de cabeza! = ¡Para todos! – jtromans

+1

Nota: debe ser ''-depsc2'', no'' depsc2'' para el segundo argumento del comando 'print (..)'. –

+0

@EvgeniSergeev - ¡correcto, mi mal! He editado en esa corrección. –

0

Siempre adquiero los trazados finales (los que se supone que deben insertarse en documentos y publicaciones) por matplotlib biblioteca de python.

Puede apostar por la increíble calidad de los trazados generados, tanto en los formatos .pdf como .

Cuestiones relacionadas