Белые линии в 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]()
Ответы
Ответ 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]()