web-dev-qa-db-fra.com

quand j'utilise Matplotlib dans Jupyter Notebook, il soulève toujours le message "Matplotlib utilise actuellement un backend non-graphique".

import matplotlib.pyplot as pl
%matplot inline
def learning_curves(X_train, y_train, X_test, y_test):
""" Calculates the performance of several models with varying sizes of training data.
    The learning and testing error rates for each model are then plotted. """

print ("Creating learning curve graphs for max_depths of 1, 3, 6, and 10. . .")

# Create the figure window
fig = pl.figure(figsize=(10,8))

# We will vary the training set size so that we have 50 different sizes
sizes = np.rint(np.linspace(1, len(X_train), 50)).astype(int)
train_err = np.zeros(len(sizes))
test_err = np.zeros(len(sizes))

# Create four different models based on max_depth
for k, depth in enumerate([1,3,6,10]):

    for i, s in enumerate(sizes):

        # Setup a decision tree regressor so that it learns a tree with max_depth = depth
        regressor = DecisionTreeRegressor(max_depth = depth)

        # Fit the learner to the training data
        regressor.fit(X_train[:s], y_train[:s])

        # Find the performance on the training set
        train_err[i] = performance_metric(y_train[:s], regressor.predict(X_train[:s]))

        # Find the performance on the testing set
        test_err[i] = performance_metric(y_test, regressor.predict(X_test))

    # Subplot the learning curve graph
    ax = fig.add_subplot(2, 2, k+1)

    ax.plot(sizes, test_err, lw = 2, label = 'Testing Error')
    ax.plot(sizes, train_err, lw = 2, label = 'Training Error')
    ax.legend()
    ax.set_title('max_depth = %s'%(depth))
    ax.set_xlabel('Number of Data Points in Training Set')
    ax.set_ylabel('Total Error')
    ax.set_xlim([0, len(X_train)])

# Visual aesthetics
fig.suptitle('Decision Tree Regressor Learning Performances', fontsize=18, y=1.03)
fig.tight_layout()
fig.show()

quand j'exécute la fonction learning_curves(), elle affiche:

UserWarning: C:\Utilisateurs\Administrateur\Anaconda3\lib\site-packages\matplotlib\figure.py: 397: UserWarning: matplotlib utilise actuellement un back-end non-graphique, donc impossible d'afficher la figure.

this is the screenshot

29
Yuhao Li

Vous n'avez pas besoin de la ligne "fig.show ()". Il suffit de l'enlever. Ensuite, il n'y aura pas de message d'avertissement. 

43
Yul

Vous pouvez modifier le backend utilisé par matplotlib en incluant:

import matplotlib
matplotlib.use('TkAgg')

avant votre ligne 1 import matplotlib.pyplot as pl, car elle doit être définie en premier. Voir cette réponse pour plus d'informations.

(Il existe d'autres options d’arrière-plan, mais changer d’arrière-plan en TkAgg a fonctionné pour moi lorsque j’avais un problème similaire)

15
airdas

l'ajout de % matplotlib inline lors de l'importation permet d'obtenir des tracés lisses dans le bloc-notes

%matplotlib inline
import matplotlib.pyplot as plt

% matplotlib inline définit le backend de matplotlib sur le backend 'inline': Avec ce backend, la sortie des commandes de traçage est affichée en ligne dans les interfaces comme le cahier Jupyter, directement sous la cellule de code qui l'a généré. Les parcelles résultantes seront alors également stockées dans le document de cahier.

4
Mulugeta Weldezgina

Tester avec https://matplotlib.org/examples/animation/dynamic_image.html Je viens d'ajouter

%matplotlib notebook

ce qui semble fonctionner mais est un peu cahoteux. Je devais arrêter le kernal de temps en temps :-(

4
Clemens Tolboom

J'essayais de faire un regroupement 3D semblable à Vers le didacticiel de Data Science . J'ai d'abord pensé que fig.show() pourrait être correct, mais j'ai reçu le même avertissement ... Brièvement visualisé Matplot3d .. mais j'ai alors essayé plt.show() et le modèle 3D affiché était exactement comme prévu. Je suppose que cela a du sens aussi. Cela équivaudrait à votre pl.show()

Utilisation de python 3.5 et de Jupyter Notebook

2
GAINZ