繁体   English   中英

matplotlib 的 pcolor 中的白线

[英]White lines in matplotlib's pcolor

在某些 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")

在此处输入图片说明

评论有一个很好的解决方案,它利用了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM