【问题标题】:Inline figure saved as PNG from Jupyter notebook shows black margin in IrfanView从 Jupyter 笔记本保存为 PNG 的内联图形在 IrfanView 中显示黑色边距
【发布时间】:2021-03-03 10:34:24
【问题描述】:

这个最小的例子(作为 ipython/yupiter notebook 的唯一单元格)

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
fig.savefig('test.png')

在代码单元格中产生预期的空图,但 IrfanView 显示的 PNG 文件带有黑色边距,而不是刻度和刻度标签。 IrfanView 中的检查排除了透明度问题。 我也试过fig.tight_layout()plt.savefig

版本是

  • Windows 10
  • IrfanView 4.44 - 64 位
  • 内核:6.2.0
  • matplotlib: 3.3.4
  • 蟒蛇:3.9.0

编辑:SVG 和 PDF 很好,即使 PNG 在 Paint 中看起来也很好,而 paint.net 在边缘显示透明背景。我之前对 IrfanView 的检查包括选择内部区域的白色作为透明颜色,这显然将边缘的以前透明背景更改为黑色:-(

编辑 2:IrfanView 可以配置为以黑色以外的其他颜色显示透明像素(选项 > 属性 > 查看 > 主窗口颜色),但该设置仅在重新加载/重新打开时应用于透明像素。

【问题讨论】:

  • 我在 python 3.7 中得到了预期的输出,可能与 python 版本有关。即使更改输出格式,您是否获得相同的结果?例如尝试保存为 SVG 甚至 PDF

标签: python jupyter-notebook


【解决方案1】:

这是您的代码为我生成的 test.png:

也许您可以发布您的数字以更清楚地说明问题所在。你用的是什么后端?找出来:

import matplotlib
matplotlib.get_backend()

也许使用set_facecolor 会有所帮助?

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
fig.patch.set_facecolor('white')
fig.savefig('test.png')

【讨论】:

  • 输出:'module://ipykernel.pylab.backend_inline'。 set_facecolor('white') 帮助。谢谢,要我报告错误吗?
  • 我不知道,因为我不确定到底是什么问题。我觉得问题只是透明度(已被 set_facecolor 删除)以及您如何打开生成的 PNG。
  • 内联后端通过导出带有透明部分的图表违反了最小惊喜原则,而其他后端(以及用于绘图的其他程序,如 Gnuplot、Excel)则不这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 2014-12-17
  • 2015-04-07
  • 2020-07-22
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多