2012-12-11 13 views
7

Quando si stampano piccoli oggetti patch in matplotlib, vengono introdotti artefatti a causa della risoluzione dello schermo. L'uso dell'anti-aliasing non risolve il problema.Artefatti nel plottaggio della tessitura matplotlib

Esiste una soluzione a questo problema?

import matplotlib.pyplot as plt 
import matplotlib.patches as patches 

ax = plt.axes() 

for x in range(-10,11): 
    for y in range(-10,11): 
     rect = patches.Rectangle((x, y), width=0.1, height=0.1, color='k',aa=True) 
     ax.add_patch(rect) 

plt.xlim([-30, 30]) 
plt.ylim([-30, 30]) 
plt.show() 

output

+1

Ho avuto questo problema pure. Questo non aiuta la tua sessione interattiva, ma per quello che vale se si salva l'immagine in un formato vettoriale, ad esempio 'plt.save (" a.pdf ")' il pdf risultante non subisce gli stessi artefatti. – Hooked

+0

L'impostazione di 'ec = 'none'' potrebbe aiutare un po':' rect = patches.Rectangle ((x, y), width = 1, height = 1, color = 'k', ec = 'none') ' –

+0

Non ho potuto riprodurre questo problema. Salvato come png e come jpg con matplotlib 1.1.1 su OS X, e il risultato andava bene. – tiago

risposta

3

Grazie per mettere insieme un semplice esempio del problema - si fa davvero indagare questo molto più facile!

Esiste una soluzione a questo problema?

Sì, è venuto fuori! La mia ipotesi iniziale, osservando solo l'immagine che hai allegato, era che c'erano degli strani clipping/clipping in corso. Dopo aver escluso la possibilità di antialiasing (sfogliando l'interruttore che hai fornito), l'unico altro modo per testare era impostare la parola chiave "snap" su false (per i documenti molto limitati sul metodo snap vedere http://matplotlib.org/api/artist_api.html#matplotlib.artist.Artist.set_snap).

Impostazione scatto fa il trucco e si finisce con i risultati attesi:

import matplotlib.pyplot as plt 
import matplotlib.patches as patches 

ax = plt.axes() 

for x in range(-10,11): 
    for y in range(-10,11): 
     rect = patches.Rectangle((x, y), width=0.1, height=0.1, 
           color='k', snap=False) 
     ax.add_patch(rect) 

plt.xlim([-30, 30]) 
plt.ylim([-30, 30]) 
plt.show() 

Un confronto visivo (probabilmente meglio aprire l'immagine in una nuova finestra come browser probabilmente scalare l'immagine e introdurre ulteriori effetti visivi):

comparison of the snap property

io non sono particolarmente informato circa la proprietà a scatto in MPL e se questo è un comportamento davvero auspicabile, così mi post una domanda sulla MPL-devel mailing list per aprire una conversazione su questa domanda. Speriamo che questa risposta ti possa aiutare nel frattempo.

Problemi correlati