%matplotlib line magic在Python脚本中导致SyntaxError

时间:2016-02-24 07:24:39

标签: python matplotlib ipython spyder

我尝试在Spyder上运行以下代码(Python 2.7.11):

# -*- coding: utf-8 -*-

import numpy as np
import pandas as pd

%matplotlib inline

import matplotlib.pyplot as plt
import matplotlib.cm as cm

import tensorflow as tf

# settings
LEARNING_RATE = 1e-4
# set to 20000 on local environment to get 0.99 accuracy
TRAINING_ITERATIONS = 2000        

DROPOUT = 0.5
BATCH_SIZE = 50

# set to 0 to train on all available data
VALIDATION_SIZE = 2000

# image number to output
IMAGE_TO_DISPLAY = 10

但我收到了这个错误:

line 10
    %matplotlib inline
    ^
SyntaxError: invalid syntax.

如果有人给我解释,我感激不尽。

P.S。代码来自Kaggle竞赛项目:Digit Recognizer

7 个答案:

答案 0 :(得分:47)

只有IPython命令行支持Line magics。它们不能简单地在脚本中使用,因为%something不是正确的Python语法。

如果要从脚本执行此操作,则必须访问IPython API,然后调用run_line_magic函数。

而不是%matplotlib inline,您必须在脚本中执行以下操作:

from IPython import get_ipython
get_ipython().run_line_magic('matplotlib', 'inline')

this answer中描述了类似的方法,但它使用了已弃用的magic函数。

请注意,该脚本仍需要在IPython中运行。在vanilla Python下,get_ipython函数返回Noneget_ipython().run_line_magic将引发AttributeError }。

答案 1 :(得分:5)

%matplotlib inline中的语法'%'被iPython识别(设置它来处理魔术方法),而不是Python本身,它给出了一个SyntaxError。 Here is given one solution.

答案 2 :(得分:4)

如果您在脚本的顶部包含以下代码,matplotlib将在IPython环境(如jupyter,氢原子插件......)中内联运行,并且它仍然有效如果您通过命令行直接启动脚本(matplotlib不会内联运行,并且图表将像往常一样在弹出窗口中打开)。

from IPython import get_ipython
ipy = get_ipython()
if ipy is not None:
    ipy.run_line_magic('matplotlib', 'inline')

答案 3 :(得分:4)

由于仅IPython命令行不支持换行符,因此Python cl不支持换行符,请使用:'exec(%matplotlib inline)'而不是%matplotlib inline

答案 4 :(得分:1)

为什么这不起作用有几个原因。

matplotlib可能未正确安装。 你试过跑步吗?

conda install matplotlib

如果这不起作用,请查看%PATH%环境变量,它是否包含库和python路径?

Similar problem on github anaconda

答案 5 :(得分:0)

  

这是您使用Julia的情况:

Julia中IPython的%matplotlib的类似物是使用PyPlot包,该包为Matplotlib提供了Julia接口,包括IJulia笔记本中的内联图。 (默认情况下,Julia中已经加载了等效的numpy。) 给定PyPlot,%matplotlib内联的类似物正在使用PyPlot,因为PyPlot默认为IJulia中的内联图。

答案 6 :(得分:-1)

而不是%matplotlib内联,它不是一个python脚本所以我们可以像这样写它会工作 来自IPython import get_ipython get_ipython()。run_line_magic(' matplotlib',' inline')