matplotlib的p中的白线

2024-05-19 03:38:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在一些pdf查看器(如在OSX上预览)中,使用matplotlib的pcolor绘制的绘图有白线(参见下图)。我怎样才能摆脱他们?

源代码非常简单(为xyz选择任何数据):

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


Tags: 数据import绘图pdf源代码matplotlibuseas
3条回答

注释有一个利用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)),直到获得满意的结果。

我遇到了这个问题,使用rasterized=True解决了它(在matplotlib版本3.1.0)。

接受的答案对我不太好。除了linewidth=0之外,我似乎通过使用antialiased=True更接近了。这是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

相关问题 更多 >

    热门问题