web-dev-qa-db-de.com

AttributeError: 'Modul' Objekt hat kein Attribut 'plot' - Seaborn

Ich bin sehr neu mit diesen Bibliotheken und habe Probleme beim Plotten:

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()

Und ich bekomme diese Ausgabe:

 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'

Ich führe dies in meinem Jupyter Notebook mit Python 2.7.12 aus. Irgendwelche Ideen?

13
jscherman

sns.plt.show() funktioniert gut für mich mit Seaborn 0.7.1. Könnte sein, dass dies in anderen Versionen anders ist. Wenn Sie import matplotlib.pyplot as plt jedoch trotzdem verwenden, können Sie auch einfach plt.show() verwenden, da sns.plt.show() nur funktioniert, da pyplot innerhalb des seaborn-Namensraums verfügbar ist.

Nun, ich bin auch mit Seaborn 0.8.1 auf dieses Problem gestoßen. Es stellte sich heraus, dass es in der Lage ist, sns.plt.show() aufzurufen, schlechte Praxis und die Tatsache, dass es funktioniert hat ein Fehler war den der Entwickler behoben hat. Leider gibt es viele Tutorials da draußen , die immer noch raten, sns.plt.show() zu verwenden. So habe ich es gelöst:

  1. Plt direkt importieren: import matplotlib.pyplot as plt
  2. Stellen Sie vor dem Plotten die standardmäßigen ästhetischen Parameter ein: sns.set() - wichtig, da Sie sonst die Seaborn-Paletten nicht erhalten.
  3. Ersetzen Sie alle Aufrufe von sns.plt durch plt.
7
autonomy

Ab Seaborn 0.8.1 löst sns.plt.plot() den Fehler module 'seaborn' has no attribute 'plt' aus.

sns.plot() löst ebenfalls einen Fehler aus; Diese Methoden befinden sich nicht in Seaborns API.

Das Löschen von "sns", um "plt.plot ()" (wie andere Antworten vermuten lassen) zu verlassen, funktioniert zwar, aber nur, weil wir die sns.set () -Methode bereits früher im Skript aufgerufen haben. . dh Seaborn macht eine ästhetische Veränderung: Matplotlib ist immer noch das Objekt, das das Plotten durch seine plt.plot () - Methode durchführt.

Dieses Skript zeigt sns.set () in Aktion ..., wenn Sie den Kommentaren folgen und sns.set () zwischen wechseln An verschiedenen Stellen im Skript ändert sich das Erscheinungsbild der Subplots. Sie sehen aus wie Seaborn-Plots, aber Matplotlib macht das Plotten.

Seaborn hat natürlich eine Menge eigener Plotmethoden (wie sns.boxplot (), sns.violinplot () usw.), aber es gibt keine Methode sns.plt.plot () mehr.

5
olisteadman

Kann wegen schlechten Rufs nicht kommentieren (Neuling hier)

Ich möchte nur bestätigen, dass ich den gleichen Fehler bei der Verwendung von Jupyter in Anaconda (Februar 2018) erhalten habe. Habe den Code von hier aber der Fehler ist aufgetreten. Es stellt sich heraus, dass ich einfach hinzufügen muss 

import matplotlib

auf 

import seaborn as sns

und es funktioniert gut mit plt.show() anstelle von sns.plt.show()

Stellen Sie sicher, dass Sie Ihre Python-Shell sowie IDEs wie Anaconda aktualisiert haben. Wie ich einen ständigen Fehler in Spyder (Hosted under Anaconda) mit relplot und catplot hatte, bis ich Anaconda und seaborn (0.90) aktualisiert habe.

0
Denis Mwaniki