如何解决光栅化错误栏时的丑陋轮廓
我正在使用 Matplotlib(2.2.5 版)绘制大量有错误的数据点,并且我正在栅格化数据,因为有几千个数据点。我发现,当我对数据进行光栅化并另存为 PDF 时,误差线会产生一个难看的白色轮廓,这对于发布来说是不可接受的。我已经构建了一个显示问题的 MWE:
import numpy as np
import random as rand
import matplotlib.pyplot as plt
rand.seed(10)
seeds = range(0,1000)
data = np.empty((len(seeds),2))
for n in seeds:
data[n,0] = rand.gauss(1,0.01)
data[n,1] = rand.gauss(1,0.01)
fig,ax = plt.subplots(1,1,figsize=(6,6))
ax.scatter(data[:,0],data[:,1],s=10,facecolors="k",rasterized=True,zorder=1)
ax.errorbar(data[:,xerr=0.01,yerr=0.01,color="k",fmt="none",zorder=2)
fig.savefig("Test.pdf",dpi=250)
这在 Jupyter Notebook 输出中看起来不错,也可以作为保存的 PNG 文件。但是,输出 PDF 文件如下所示: 我如何摆脱由误差线引起的白色绒毛?如果我不光栅化,问题就会消失,但是文件需要很长时间才能加载到我的论文中,而且我最不想做的就是惹恼我的读者。
解决方法
感谢 an older question 我找到了解决方案:我需要在代码中添加 ax.set_rasterization_zorder(0)
并将绘制点的 zorder 更改为低于 0。这产生了一个完美的图形,没有丑陋的轮廓数据并保留矢量化轴,正是我想要的。工作代码是:
import numpy as np
import random as rand
import matplotlib.pyplot as plt
rand.seed(10)
seeds = range(0,1000)
data = np.empty((len(seeds),2))
for n in seeds:
data[n,0] = rand.gauss(1,0.01)
data[n,1] = rand.gauss(1,0.01)
fig,ax = plt.subplots(1,1,figsize=(6,6))
ax.scatter(data[:,0],data[:,1],s=10,facecolors="k",rasterized=True,zorder=-2)
ax.errorbar(data[:,xerr=0.01,yerr=0.01,color="k",fmt="none",zorder=-1)
ax.set_rasterization_zorder(0)
fig.savefig("Test.pdf",dpi=250)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。