【问题标题】:Why doesn't '%matplotlib inline' work in python script?为什么 '%matplotlib inline' 在 python 脚本中不起作用?
【发布时间】:2019-12-09 00:46:51
【问题描述】:

以下不起作用:

然而,这在 Jupiter Notebook 中完全有效。

如果我只是将其注释掉,则图表不会显示。 (也许它无论如何都不会出现)

import pandas as pd
import matplotlib

from numpy.random import randn
import numpy as np

import matplotlib.pyplot as plt

df = pd.read_csv('data/playgolf.csv', delimiter='|' )
print(df.head())

hs = df.hist(['Temperature','Humidity'], bins=5)
print(hs)

【问题讨论】:

  • % 被这样使用不是有效的 Python 语法。这必须是 Jupiter 独有的运算符,因为通常% 表示模数;即一个数除以另一个数的余数。
  • Jupiter Notebook 具有不属于 Python 语言本身的功能。所有以 % 为前缀的命令都是特殊的扩展,而不是常规的 Python 语句。
  • @Blckknght 你会推荐和替代方案吗?
  • 您应该可以简单地留下%matplotlib inline 部分。这仅在 Jupiter Notebook 中有意义:它使 matplotlib 的绘图出现在笔记本单元格中,而不是作为单独的窗口。由于您没有嵌入它们的笔记本窗口,因此单独的窗口是唯一的方法。
  • @ZHU 您可以在$HOME/.ipython/profile_default/ipython_config.py 中添加c.InteractiveShellApp.matplotlib = 'inline',这样您就不会再为%matplotlib inline 烦恼了:-)

标签: python matplotlib


【解决方案1】:

其他答案和 cmets 已经充分详细说明了为什么 %matplotlib inline 不能在 python 脚本中工作。

解决实际问题,就是在脚本中显示情节,答案是使用

plt.show()

在脚本的末尾。

【讨论】:

  • 然而,这可以在 matplotlib 窗口中显示绘图,但如果从笔记本本身调用脚本并且后端不是 inline,则不会自动在笔记本中显示绘图。 HuynhTan 的回答在这两种情况下都有效。
【解决方案2】:

如果您使用笔记本并将 my_file.py 文件作为模块运行

将“%matplotlib inline”行更改为“get_ipython().run_line_magic('matplotlib', 'inline')”。 然后使用这个 %run 运行 my_file.py 它应该是这样的:

在 my_file.py 中:

get_ipython().run_line_magic('matplotlib', 'inline')

在笔记本中:

%run my_file.py

这在 ipython 中运行 my_file.py,这有助于避免错误

NameError: name 'get_ipython' 未定义

【讨论】:

    【解决方案3】:

    根据http://ipython.readthedocs.io/en/stable/interactive/magics.html% 是一个特殊的 iPython/Jupyter 命令:

    为系统命令定义别名。

    %alias alias_name cmdalias_name 定义为cmd 的别名

    在标准 Python 中,% 在一个数字除以另一个数字时取余数(或可用于字符串插值),因此在标准 Python 程序中,%matplotlib inline 没有任何意义。但是,它确实可以在 iPython 中工作,如上所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-18
      • 2017-05-30
      • 2016-10-28
      • 1970-01-01
      • 2021-02-10
      • 2013-05-23
      • 2013-11-18
      • 1970-01-01
      相关资源
      最近更新 更多