【问题标题】:Ugly Outline When Rasterizing Errorbar光栅化错误栏时的丑陋轮廓
【发布时间】:2021-05-31 08:42:23
【问题描述】:

我正在使用 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[:, 0], data[:, 1], xerr=0.01, yerr=0.01, color="k", fmt="none", rasterized=True, zorder=2)

fig.savefig("Test.pdf", dpi=250)

这在 Jupyter Notebook 输出中看起来不错,并且还保存为 PNG 文件。然而,输出的 PDF 文件如下所示: 如何摆脱由误差线引起的白色绒毛?如果我不进行光栅化,问题就会消失,但是文件需要很长时间才能加载到我的论文中,我最不想做的就是惹恼我的读者。

【问题讨论】:

  • 您是否尝试过另存为 PNG?
  • 是的,将其保存为 PNG确实 解决了问题,但我希望框架的 PDF 具有灵活性和分辨率。另外,无论如何这只是无意的行为,所以我更喜欢适当的解决方案。
  • 您可以任意设置 PNG 的分辨率,然后将其插入 PDF。只是说。

标签: python matplotlib errorbar rasterizing savefig


【解决方案1】:

感谢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[:, 0], data[:, 1], xerr=0.01, yerr=0.01, color="k", fmt="none", rasterized=True, zorder=-1)

ax.set_rasterization_zorder(0)

fig.savefig("Test.pdf", dpi=250)

输出为:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-17
    • 2020-04-29
    • 2013-10-21
    • 2011-03-28
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多