AttributeError:“模块”对象没有属性“情节”-Seaborn

Posted

技术标签:

【中文标题】AttributeError:“模块”对象没有属性“情节”-Seaborn【英文标题】:AtributeError: 'module' object has no attribute 'plt' - Seaborn 【发布时间】:2017-12-17 15:58:19 【问题描述】:

我对这些库非常陌生,并且在绘制时遇到了麻烦:

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

我得到了这个输出:

 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'

我在我的Jupyter NotebookPython 2.7.12 中运行它。有什么想法吗?

【问题讨论】:

应该只是plt.show() 没有sns 我不会关闭这个问题,因为sns.plt.show() 应该可以工作并且将其保持打开状态可能会让某人选择提供关于哪些版本的 seaborn 支持它的答案。 @ImportanceOfBeingErnest 为什么说它“应该工作”?这不会出现在文档中的任何地方,并且在任何使用 matplotlib.pyplot 的地方都没有出现,它是直接导入的。 @mwaskom 我假设是因为它正在工作。并且仅仅因为某些东西没有记录,我们不能假设它不应该工作。但无论如何,在这里给出明确答案的可能是你。 @ImportanceOfBeingErnest 在 seaborn 中从来没有 pyplot 的“包装器”,您只能访问***命名空间中的对象,除非您努力不这样做。例如您可以导入 matplotlib,然后执行 matplotlib.numpy 以获取 numpy。但这并不意味着你应该这样做。 【参考方案1】:

sns.plt.show() 使用 seaborn 0.7.1 对我来说效果很好。可能是这在其他版本中有所不同。但是,如果您无论如何import matplotlib.pyplot as plt,您也可以简单地使用plt.show(),因为sns.plt.show() 之所以有效,是因为pyplot 在seaborn 命名空间中可用。

【讨论】:

【参考方案2】:

嗯,我在 Seaborn 0.8.1 中也遇到了这个问题。事实证明能够调用sns.plt.show() 是不好的做法,而且开发人员修复了它工作was a bug 的事实。不幸的是,有很多教程out there 仍然建议使用sns.plt.show()。我就是这样解决的:

    直接导入plt:import matplotlib.pyplot as plt 在绘制任何内容之前,请设置默认美学参数:sns.set() - 很重要,否则您将无法获得 Seaborn 调色板。 将所有对sns.plt 的调用替换为plt

【讨论】:

拯救了我的一天!谢谢。我觉得这应该被接受为答案。【参考方案3】:

从 Seaborn 0.8.1 开始,sns.plt.plot() 引发错误 module 'seaborn' has no attribute 'plt'

sns.plot() 也会引发错误;这些方法不在 Seaborn's API 中。

删除“sns”。离开“plt.plot()”(正如其他答案所暗示的那样)确实有效,但这只是因为我们在脚本的前面已经调用了 sns.set() 方法......即 Seaborn 正在做出美学上的改变:Matplotlib 仍然是对象,它通过其 plt.plot() 方法进行绘图。

This script 显示 sns.set() 正在运行...如果您关注 cmets 并交换 sns。 set() 在脚本的不同位置之间,它会改变子图的外观。它们看起来像 Seaborn 绘图,但 Matplotlib 正在绘制。

Seaborn 当然有很多自己的绘图方法(如 sns.boxplot()、sns.violinplot() 等),但不再有方法 sns.plt.plot().

【讨论】:

【参考方案4】:

我只是想确认我在 Anaconda 中使用 Jupyter 时遇到了同样的错误(2018 年 2 月)。从here 获取代码,但发生错误。原来我需要简单的添加

import matplotlib.pyplot as plt

在上面

import seaborn as sns

使用plt.show() 而不是sns.plt.show() 效果很好

【讨论】:

【参考方案5】:

确保您已更新您的 python shell 以及像 Anaconda 这样的 IDE。 就像我在使用 relplot 和 catplot 的 Spyder(在 Anaconda 下托管)中经常出现错误,直到我更新了 Anaconda 和 seaborn(0.90)。 通过 Anaconda 命令行更新应该非常简单,就像我的情况一样。

【讨论】:

以上是关于AttributeError:“模块”对象没有属性“情节”-Seaborn的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:“模块”对象没有属性

AttributeError:“模块”对象没有属性“百分位”

AttributeError:“模块”对象没有属性

无法安装模块 - AttributeError: 'NoneType' 对象没有属性 'loader'

AttributeError:“模块”对象没有属性“urlopen”

AttributeError:“模块”对象没有属性“ORB”