【问题标题】:Weird iPython Notebook figure size behavior奇怪的 iPython Notebook 图形大小行为
【发布时间】:2016-02-22 10:34:49
【问题描述】:

我在 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 只在我第一次运行时生效。为什么会这样?

【问题讨论】:

    标签: matplotlib plot ipython-notebook figure


    【解决方案1】:

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

    当您第二次import set_figsize 时,Python 检入sys.modules 并看到已经以名称set_figsize 导入了一个模块对象,因此它只使用该对象。它不会再次运行该文件。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 2015-01-12
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多