[英]White lines in matplotlib's 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")
评论有一个很好的解决方案,它利用了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)
),直到得到满意的结果。
接受的答案对我来说效果不佳。 除了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)
我遇到了这个问题,使用rasterized=True
解决了它(在 matplotlib 版本3.1.0
)。
基于@eqzx 的回答:如果您设置 alpha=1,就网格线而言,您将获得更好的结果。 但是,您的应用程序/用例可能会有所不同。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
xx, yy = np.meshgrid(x, y)
zz = xx**2 + yy*2
fig, axes = plt.subplots(2,3, figsize=(15,5))
axes[0,0].pcolormesh(XX, YY, ZZ_r, zorder=-1, cmap='magma', alpha=0.5, antialiased=True)
axes[0,1].pcolormesh(XX, YY, ZZ_r, zorder=-1, cmap='magma', alpha=0.5, antialiased=True, linewidth=0.0)
axes[0,2].pcolormesh(XX, YY, ZZ_r, zorder=-1, cmap='magma', alpha=0.5, antialiased=False, linewidth=0.0)
axes[1,0].pcolormesh(XX, YY, ZZ_r, zorder=-1, cmap='magma', alpha=1, antialiased=True)
axes[1,1].pcolormesh(XX, YY, ZZ_r, zorder=-1, cmap='magma', alpha=1, antialiased=True, linewidth=0.0)
axes[1,2].pcolormesh(XX, YY, ZZ_r, zorder=-1, cmap='magma', alpha=1, antialiased=False, linewidth=0.0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.