web-dev-qa-db-fra.com

La magie de la ligne% matplotlib provoque SyntaxError dans le script Python

J'essaie d'exécuter les codes suivants sur 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

Mais j'ai eu cette erreur:

line 10
    %matplotlib inline
    ^
SyntaxError: invalid syntax.

J'apprécie si quelqu'un me donne une explication.

P.S. le code provient du projet de compétition Kaggle: Digit Recognizer

40
John

Les magics de ligne ne sont pris en charge que par la ligne de commande IPython. Ils ne peuvent pas simplement être utilisés dans un script, car la syntaxe de %something n'est pas correcte Python.

Si vous souhaitez effectuer cette opération à partir d'un script, vous devez accéder à l'API IPython, puis appeler la fonction run_line_magic.

Au lieu de %matplotlib inline, vous devrez faire quelque chose comme ceci dans votre script:

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

Une approche similaire est décrite dans cette réponse , mais elle utilise la fonction obsolète magic.

Notez que le script doit encore être exécuté en IPython. Sous Vanilla Python, la fonction get_ipython renvoie None et get_ipython().run_line_magic lèvera un AttributeError.

51
kazemakase

Comme la magie des lignes est uniquement prise en charge par la ligne de commande IPython et non par Python cl, utilisez: 'exec(%matplotlib inline)' au lieu de %matplotlib inline

7
Abraham Sanchez

La syntaxe '%' dans %matplotlib inline est reconnue par iPython (où il est configuré pour gérer les méthodes magiques), mais pas par Python lui-même, ce qui donne une SyntaxError. On donne ici une solution.

5
Silvia07

Si vous incluez le code suivant en haut de votre script, matplotlib s'exécutera en ligne dans un environnement IPython (comme jupyter, un hydrogène atom plugin ...), et il fonctionnera toujours si vous lancez le script directement via la ligne de commande (matplotlib ne s'exécutera pas en ligne et les graphiques s'ouvriront comme d'habitude dans une fenêtre contextuelle).

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

Il y a plusieurs raisons pour lesquelles cela ne fonctionnerait pas.

Il est possible que matplotlib ne soit pas correctement installé. avez-vous essayé de courir:

conda install matplotlib

Si cela ne fonctionne pas, examinez votre variable d'environnement% PATH%, contient-elle vos bibliothèques et vos chemins python?

Problème similaire sur github anaconda

1
GLaDOS

C'est le cas que vous utilisez Julia:

L'analogue de% matplotlib d'IPython dans Julia consiste à utiliser le package PyPlot, qui fournit une interface Julia à Matplotlib, y compris les tracés en ligne dans les cahiers IJulia. (L'équivalent de numpy est déjà chargé par défaut dans Julia.) Etant donné à PyPlot, l'analogue de% matplotlib inline utilise PyPlot, puisque PyPlot utilise par défaut les tracés en ligne dans IJulia.

0
Lorenzo Castagno