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 Notebook
和Python 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: 'NoneType' 对象没有属性 'loader'