调用 Fig.add_axes() 时,Jupyter Notebook 中的 Python 内核崩溃

标签 python matplotlib crash jupyter-notebook

所以我在 Windows 上安装了 Anaconda,运行一个包含很多东西的环境,并且:

  • Python 3.6.6
  • ma​​tplotlib 2.2.3

当我运行以下代码时,我的 Python 内核崩溃了:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10,10))
fig = plt.figure(figsize=(10,10))
fig.add_axes([10,200,50,50])

有谁知道为什么会发生这种情况,或者也许可以尝试重现,以便我知道这不仅仅是我的电脑死了?

最佳答案

简答:使用合理的坐标来放置轴,例如 0 到 1 之间的数字

fig.add_axes([0.1 ,0.2, 0.5, 0.5])

我想这个数字太大了。该数字范围在 0 到 1 之间。因此,虽然在某些情况下您可能想要添加该范围之外的轴,例如[-0.1,0.7,0.3,0.5],在 200 倍图形高度的坐标处创建轴并不是很有用。

嗯,“没用”并不意味着它应该崩溃。因此,可能发生的情况是,您试图在屏幕上以将图形大小扩展到图形内容的版本显示此图形。默认情况下,这可能会发生在 jupyter 笔记本中,该笔记本显示通过 fig.savefig(..., bbox_inches="tight") 保存的图形。因此,假设图形尺寸为 10 x 10 英寸,[10,200,50,50] 会导致尝试保存的图形尺寸为宽度 60*10=600 英寸和 250*10=2500 英寸在高度上。如果 dpi 为 72,则生成 (43200 x 180000) 像素的 png 图像。这似乎需要渲染器来处理。

当将代码作为脚本运行时(添加 fig.savefig(..., bbox_inches="tight")),您实际上会使用通常的 Agg 得到一个错误基于渲染器,

RuntimeError: Unknown exception in RendererAgg

这意味着渲染器无法生成图形。我不知道为什么在 Ipython/Juypter 中没有出现这样的错误。

使用“cairo”渲染器显示更有用的错误消息,

import matplotlib
matplotlib.use("Qt4Cairo")
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10,10))
fig = plt.figure(figsize=(10,10))
fig.add_axes([10,200,50,50])
fig.savefig("hugeaxesposition.png", bbox_inches="tight")

显示

cairocffi.CairoError: cairo returned CAIRO_STATUS_INVALID_SIZE: 
    invalid value (typically too big) for the size of the input (surface, pattern, etc.)

我同意,从用户的角度来看,看到这样的错误比崩溃更有用。

虽然 IPython/Jupyter 中没有显示错误的原因可能值得进一步研究,但它确实没有高优先级,因为 matplotlib 无论如何都不是为了产生巨大的数字而设计的。

关于调用 Fig.add_axes() 时,Jupyter Notebook 中的 Python 内核崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52648036/

相关文章:

python - 如何通过其他列值在一行中绘制两种颜色?

使用适用于 iOS 的 Google Maps SDK 的 iOS 应用程序崩溃并出现异常代码 : 0x0000000000000000

python - 检查数组是否是数组列表的元素

python - 通过 Python 运行 Windows 任务计划程序

ruby - 在 ruby​​ 中使用 matplotlib.image 是否有等效项

performance - 崩溃报告 'String - Couldn' t 下载或检索文件的任何线索。来自 Sentry - Flutter App?

Android:媒体播放器从 url 传输 mp3 时无法准备

python - 在 python shell 上制作一个闪烁的忙碌指示器

python - PyDev-Eclipse Python 未配置

python - 如果第一次分配 matplotlib 不更改散点颜色