Подтвердить что ты не робот

Белые линии в matplotlib pcolor

В некоторых просмотрах PDF, таких как Предварительный просмотр на OSX, графики, сделанные с помощью matplotlib pcolor, имеют белые линии (см. изображение ниже). Как я могу избавиться от них?

Исходный код очень прост (выберите любые данные для x, y, z):

import matplotlib
matplotlib.use("pdf")
import matplotlib.pyplot as pl
pl.figure()
pl.pcolormesh(x,y,z,cmap="Blues",linewidth=0) 
pl.savefig("heatmap.pdf")

enter image description here

4b9b3361

Ответ 1

Комментарии имеют хорошее решение, которое использует imshow. Если imshow не подходит для входных данных (например, он не равномерно распределен), это, как правило, решает эту проблему,

pcol = pl.pcolormesh(x,y,z,cmap="Blues",linewidth=0,)
pcol.set_edgecolor('face')

Если этот подход не уменьшает достаточные строки, вы также можете попробовать следующее:

pl.pcolormesh(x,y,z,cmap="Blues",linewidth=0,rasterized=True)

В дополнение к сокращению линий между квадратами этот подход также имеет тенденцию немного уменьшать размер файла, что иногда полезно. В этом случае вы можете настроить настройку dpi при сохранении (например, pl.savefig("heatmap.pdf", dpi=300)), пока не получите что-то удовлетворительное.

Ответ 2

Принятый ответ не сработал для меня. Я, кажется, стал ближе, используя antialiased=True, в дополнение к linewidth=0. Это было с matplotlib версии 3.0.2. Обратите внимание, что средний сюжет соответствует лучшей версии.

fig, axes = plt.subplots(1,3, figsize=(15,5))
axes[0].pcolormesh(XX, YY, ZZ_r, zorder=-1, norm=norm, cmap='magma', alpha=0.5, antialiased=True)
axes[1].pcolormesh(XX, YY, ZZ_r, zorder=-1, norm=norm, cmap='magma', alpha=0.5, antialiased=True, linewidth=0.0)
axes[2].pcolormesh(XX, YY, ZZ_r, zorder=-1, norm=norm, cmap='magma', alpha=0.5, antialiased=False, linewidth=0.0)

enter image description here