ho provato entrambe le impostazioni date alle altre osservazioni, vale a dire
cbar.solids.set_rasterized(True)
cbar.solids.set_edgecolor("face")
e, purtroppo, non ha lavorato per me.
Così ho provato un approccio completamente diverso che è un enorme hack, ma almeno ottiene il lavoro svolto. Quando si passa alpha
a imshow
si imposta un valore alfa che verrà utilizzato per fondere con altre immagini. A causa di una maggiore potenza (come ha detto @mfra), ciò crea le linee bianche che disprezziamo. Chiaramente, la chiave è quindi non passare un valore alfa a imshow
. Tuttavia, dobbiamo ancora creare in qualche modo la barra dei colori.
Quindi, come soluzione alternativa, possiamo fare l'alpha che si fonde prima di dare le coordinate colore a imshow
. Per fare un esempio, usiamo la winter
mappa colore:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
xx, yy = np.meshgrid(np.linspace(-1, 1, 100), np.linspace(-1, 1, 100))
zz = xx**2 + yy**2
my_cmap_rgb = plt.get_cmap('winter')(np.arange(256))
alpha = 0.5
for i in range(3): # Do not include the last column!
my_cmap_rgb[:,i] = (1 - alpha) + alpha*my_cmap_rgb[:,i]
my_cmap = mpl.colors.ListedColormap(my_cmap_rgb, name='my_cmap')
Qui creo una nuova mappa di colori, my_cmap_rgb
, sulla base di winter
e quindi modificare i canali non-alfa (0, 1 e 2) per fare l'alpha blending me stesso . Posso quindi semplicemente usare questa nuova mappa dei colori per tracciare la mia figura.
f, ax = plt.subplots()
cim = ax.imshow(zz, cmap=my_cmap)
cbar = plt.colorbar(cim)
ax.set_title("No lines and no transparency")
Ora confrontarlo con l'immagine che ci si ottiene senza questo trucco:
f, ax = plt.subplots()
cim = ax.imshow(zz, cmap='winter', alpha=0.5)
cbar = plt.colorbar(cim)
ax.set_title("Lines and transparency")

Chiaramente il problema è risolto se si richiede alcuna trasparenza. D'altra parte, se si richiede trasparenza, c'è ancora una soluzione alternativa. Per prima cosa è necessario tracciare un'immagine senza trasparenza per ottenere la barra dei colori e quindi tracciarne una con trasparenza, ma la cui barra colori non verrà utilizzata.
f, ax = plt.subplots()
cim = ax.imshow(zz, cmap=my_cmap)
cbar = plt.colorbar(cim)
plt.cla() # Clears axis
ax.plot(50,50, 'ko')
ax.imshow(zz, cmap='winter', alpha=0.5)
ax.set_title("No lines and transparency")
Ciò restituisce un'immagine la cui barra colori non ha linee e tuttavia conserva la trasparenza. Anche se rimane un enorme trucco, almeno non dobbiamo più sopportare queste righe!

Hai provato a salvare la figura in diversi formati? Se sì, ottieni sempre questi problemi? –
L'ho visto solo a causa dell'alfa, sei proprio sicuro che sia lo stesso con alpha = 1.0? –
Sì, succede con png, ma non ho risolto il problema. Sì, l'ho visto per alpha = 1.0 con SVG. – jseabold