2009-02-13 16 views
10

Estoy tratando de trazar un montón de puntos de datos (muchos miles) en Python usando matplotlib, así que necesito que cada marcador sea muy pequeño y preciso. ¿Cómo obtengo el marcador más pequeño y simple posible? Yo uso este comando para trazar mis datos:Trazado de Python: ¿Cómo puedo hacer que matplotlib.pyplot deje de forzar el estilo de mis marcadores?

matplotlib.pyplot(x , y ,'.',markersize=0.1,linewidth=None,markerfacecolor='black') 

entonces puedo mirarlo ya sea con pl.show() y luego guardarlo. O use directamente plt.savefig('filename.ps') en el código para guardarlo. El problema es este: cuando uso pl.show() para ver el archivo en la GUI se ve genial con pequeñas marcas negras, sin embargo cuando guardo desde la show() GUI en un archivo o uso directamente savefig y luego veo ps que creé se ve diferente ! Cada marcador ha ganado un pequeño halo azul a su alrededor (como si comenzara en cada punto para conectarlos con las líneas azules predeterminadas, pero no lo hizo) y el estilo es incorrecto. ¿Por qué cambia el estilo cuando se guarda? ¿Cómo evito que python fuerce el estilo de los marcadores? Y sí, he visto algunos paquetes alternativos como CairoPlot, pero quiero seguir usando matplotlib por ahora.

Actualización: Resulta que el salvar a PNG primero hace que los colores resultan bien, pero obliga a una transformación de la imagen cuando quiero volver a guardarlo como un .ps más tarde (para su inclusión en un archivo PDF) y luego pierdo calidad. ¿Cómo conservo la naturaleza vectorial del archivo y obtengo el formato correcto?

+0

Bueno, para puntos de trazado, la versión troncal de CairoPlot tiene la clase ScatterPlot. Utilizando eso, puede definir el radio del marcador, por lo que puede establecerlo en 1, ya que sería la opción más pequeña. ¿Hay alguna razón especial para que no uses CairoPlot? – Rodrigo

Respuesta

11

Para una salida vectorizada de aspecto agradable, no utilice el estilo de marcador '.'. Use p. Ej. 'o' (círculo) o 's' (cuadrado) (ver help(plot) de las opciones) y establezca el argumento markersize palabra clave para algo adecuadamente pequeño, por ejemplo:

plot(x, y, 'ko', markersize=2) 
savefig('foo.ps') 

Eso '.' (punto) produce resultados menos buenos podría interpretarse como una error en matplotlib, pero entonces, ¿qué debería decir "punto" en un formato de gráfico vectorial?

2

Si no lo ha hecho, intente guardar en un motor de rasterización, guárdelo en un archivo PNG y vea si eso lo corrige. Si necesita un diagrama vectorial, intente guardarlo en PDF y convertirlo con una utilidad externa. También he tenido problemas anteriormente con el motor de PS que se resolvieron al guardar con los motores Agg o PDF y convertirlos externamente.

+0

Sí, este trabajo funciona. Por cierto, hacemos el mismo tipo de trabajo. – Alex

6

¿Has probado la forma de punta de ','? Crea "pixels" (puntos pequeños, en lugar de formas).

También puede jugar con la opción markersize, con esta forma?

Cuestiones relacionadas