web-dev-qa-db-fra.com

AttributeError: l'objet 'module' n'a pas d'attribut 'plt' - Seaborn

Je suis très nouveau avec ces bibliothèques et j'ai des problèmes pour écrire ceci:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import random

df5 = pd.read_csv('../../../../datos/tiempos-exacto-variando-n-m0.csv', sep=', ', engine='python')
print(df5)
df5['n'] = df5['n'].apply(lambda x: x**2)
sns.jointplot(df5['n'], df5['tiempoTotal'], kind="reg")
sns.plt.show()

Et je reçois cette sortie:

 n  m  tiempoTotal
0      1  0         2274
1      2  0         3370
2      3  0         5709
3      4  0         8959
4      5  0        13354
5      6  0        18503
6      7  0        26329
7      8  0        33859
8      9  0        41110
9     10  0        52710
10    11  0        64364
11    12  0        74142
12    13  0        81072
13    14  0        69332
14    15  0        71027
15    16  0        89721
16    17  0        85459
17    18  0        95217
18    19  0       119210
19    20  0       136888
20    21  0       131903
21    22  0       138395
22    23  0       151222
23    24  0       163542
24    25  0       177236
25    26  0       192475
26    27  0       240162
27    28  0       260701
28    29  0       235752
29    30  0       250835
..   ... ..          ...
580  581  0     88306854
581  582  0     89276420
582  583  0     87457875
583  584  0     90807004
584  585  0     87790003
585  586  0     89821530
586  587  0     89486585
587  588  0     88496901
588  589  0     89090661
589  590  0     89110803
590  591  0     90397942
591  592  0     94029839
592  593  0     92749859
593  594  0    105991135
594  595  0     95383921
595  596  0    105155207
596  597  0    114193414
597  598  0     98108892
598  599  0     97888966
599  600  0    103802453
600  601  0     97249346
601  602  0    101917488
602  603  0    104943847
603  604  0     98966140
604  605  0     97924262
605  606  0     97379587
606  607  0     97518808
607  608  0     99839892
608  609  0    100046492
609  610  0    103857464

[610 rows x 3 columns]
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-21-63146953b89d> in <module>()
      9 df5['n'] = df5['n'].apply(lambda x: x**2)
     10 sns.jointplot(df5['n'], df5['tiempoTotal'], kind="reg")
---> 11 sns.plt.show()

AttributeError: 'module' object has no attribute 'plt'

J'exécute ceci dans mon Jupyter Notebook avec Python 2.7.12. Des idées?

13
jscherman

sns.plt.show() fonctionne bien pour moi avec seaborn 0.7.1. Cela pourrait être différent dans d'autres versions. Cependant, si vous avez toujours import matplotlib.pyplot as plt, vous pouvez aussi simplement utiliser plt.show(), car sns.plt.show() ne fonctionne que parce que pyplot est disponible dans l’espace de noms seaborn.

18

Eh bien, j'ai rencontré ce problème également avec Seaborn 0.8.1. Il s'avère que pouvoir appeler sns.plt.show() est une mauvaise pratique et le fait que cela fonctionne était un bogue que le développeur a corrigé. Malheureusement, il existe de nombreux tutoriels là-bas qui conseillent encore d’utiliser sns.plt.show(). Voici comment je l'ai résolu:

  1. Importer un fichier directement: import matplotlib.pyplot as plt
  2. Avant de tracer quoi que ce soit, définissez les paramètres esthétiques par défaut: sns.set() - important, car sinon vous n'obtiendrez pas les palettes Seaborn.
  3. Remplacer tous les appels à sns.plt par plt
7
autonomy

À partir de Seaborn 0.8.1, sns.plt.plot() soulève l’erreur module 'seaborn' has no attribute 'plt'.

sns.plot() génère également une erreur; ces méthodes ne sont pas dans API de Seaborn.

Supprimer les “sns.” Pour laisser “plt.plot ()” (comme le suggèrent d'autres réponses) fonctionne, mais uniquement parce que nous avons appelé la méthode sns.set () précédemment en place dans le script. . ie _ {Seaborn opère un changement esthétique: Matplotlib est toujours l’objet, qui effectue le traçage, via sa méthode plt.plot ().

Ce script affiche sns.set () en action ... si vous suivez les commentaires et permutez sns.set () entre différents emplacements dans le script, cela change l'apparence des sous-parcelles. Ils ressemblent à des complots Seaborn, mais Matplotlib le fait.

Bien entendu, Seaborn a ses propres méthodes de tracé (comme sns.boxplot (), sns.violinplot (), etc.), mais il n’existe plus de méthode sns.plt.plot ().

5
olisteadman

Je ne peux pas commenter parce que mauvaise réputation (débutant ici)

Je veux juste confirmer que j'ai eu la même erreur en utilisant Jupyter dans Anaconda (février 2018). Vous avez obtenu le code de ici mais l'erreur est survenue. Il s'avère que je dois simplement ajouter 

import matplotlib

au dessus de 

import seaborn as sns

et cela fonctionne très bien en utilisant plt.show() au lieu de sns.plt.show()

2
Anugrah Andisetiawan

Assurez-vous d'avoir mis à jour votre shell python ainsi que les IDE tels qu'Anaconda. Comme si j'avais une erreur constante dans Spyder (hébergé sous Anaconda) avec relplot et catplot jusqu'à ce que je mette à jour Anaconda ainsi que seaborn (0,90).

0
Denis Mwaniki