Matplotlib 绘制出现未定义的图形

3

首先,如果这不是发布此类问题的地方,请原谅。

问题在于每当我执行脚本时,matplotlib 显然会绘制一个图表(我可以从旧图中识别出来,因此它不是完全随机的图表)。让我进一步解释。

该文件是一个测试文件,module_test.py,我一直在尝试确定这个问题可能来自哪里。现在我已经编写了:

import matplotlib.pyplot as plt
plt.show()

当我通过python -m package.tests.module_test运行测试时,在脚本顶部添加literally,会弹出那个“随机”的图形。在使用命令控制台中的Python时不会出现,但是在任何其他测试脚本中都会出现。否则测试正常运行。

有人知道为什么会发生这种情况吗?我已经尝试从与该问题相关的所有文件夹中删除__pycache__,但没有帮助。

这是一张图片。这是几个月前我做实验报告时的绘图。

This is the graph


1
在相关的“package”中是否有使用“matplotlib”的代码? - Davis Herring
@DavisHerring 哇,是的。我找到了做这件事的模块 - 它有一个未关闭的图形,并且被包含它的子包中的 __init__ 中的 __all__ 导入。我很惊讶会发生这样奇怪的事情。但现在已经修复了。谢谢。我应该删除这个问题还是让其他人回答,以防其他人也遇到这个问题? - mariogarcc
我认为这是一个很常见的问题(因为pyplot太容易出错了)。 - Davis Herring
@DavisHerring 好的,那我就让它保持不变。经过1个小时的彻底搜索,我在网上找不到任何解决方案。如果没有人回答,明天我会自己发布一个答案来关闭这个问题。 - mariogarcc
1个回答

3
通过模拟MATLAB GUI,matplotlib(尤其是pyplot)是有状态的。这就是说它具有全局变量和所有与之相关的调试痛苦。
特别地,每个创建的图表都无限期地保留以便可以通过其“图表编号”进行引用。它也可以成为pyplot的“当前图表”。
从包中导入一个模块隐式地导入了包的所有内容。这是仅仅导入模块不应该有任何副作用(而只是定义类、函数和常量)的原因之一。隐性副作用和远程操作的组合在这里产生了观察到的滑稽效果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接