奇怪的iPython Notebook图表大小行为

时间:2015-11-20 02:52:51

标签: matplotlib plot ipython-notebook figure

我在iPython Notebook中看到了一个我不明白的奇怪效果。如果我将以下代码放在单个单元格中并运行两次,则两次都将使用我的自定义图形尺寸规格绘制图形。

%matplotlib inline
import matplotlib
matplotlib.rcParams['figure.figsize'] = (8,6)
import matplotlib.pyplot as plt
plt.plot([0,1],[1,2])

现在,如果我创建一个名为set_figsize.py的文件,其中包含以下行:

import matplotlib
matplotlib.rcParams['figure.figsize'] = (8.0, 6.0)

并在一个单元格中启动一个包含以下内容的新笔记本:

%matplotlib inline
import set_figsize
import matplotlib.pyplot as plt
plt.plot([0,1],[1,2])

并运行两次,第一次使用我的自定义图形尺寸绘制图形,第二次将其恢复为较小的默认尺寸。如果我将%matplotlib inline放在单个单元格中并且只运行一次,我的自定义图形大小仍然存在。因此,似乎每次运行%matplotlib inline时,数字大小都设置为默认值,但运行import set_figsize仅在我第一次运行时生效。为什么会这样?

1 个答案:

答案 0 :(得分:2)

模块的代码在第一次导入时实际上只是运行。这对于防止函数和类等的双重定义以及允许循环导入(当两个模块都相互导入时)是必要的。

第二次import set_figsize时,Python检查sys.modules并发现已经在名称set_figsize下导入了模块对象,因此它只使用该对象。它不会再次运行该文件。

因此,在大多数情况下,您应该只将定义放在模块中,这是一个很好的规则。不要在导入模块时输入您希望运行的副作用的语句。如果你想编写一个Python 脚本,你可以从命令行(python script.py)执行,将所有不是定义或导入的内容放在{{1阻止。