AttributeError:“str”对象在 Seaborn、散点图中没有属性“view”
Posted
技术标签:
【中文标题】AttributeError:“str”对象在 Seaborn、散点图中没有属性“view”【英文标题】:AttributeError: 'str' object has no attribute 'view' in Seaborn , Scatterplot 【发布时间】:2019-05-30 13:09:28 【问题描述】:我在 Seaborn 中遇到了一个奇怪的异常。
对于一个可重现的例子:
toy_data.to_json()
'"X":"0":0.12765045,"1":0.0244816152,"2":0.1263715245,"3":0.0246376768,"4":0.1108581319,"5":0.1406719382,"6":0.1358105564,"7":0.1245863432,"8":0.1175445352,"9":0.1188479018,"10":0.1113148159,"11":0.117455495,"12":0.110555662,"13":0.1328567106,"14":0.103064284,"15":0.1119474442,"16":0.119390455,"17":0.1246727756,"18":0.1117827155,"19":0.1169972547,"Y":"0":0.1241083714,"1":0.1394242378,"2":0.1225010796,"3":0.0077080173,"4":0.1198371354,"5":0.0029026989,"6":0.1259473297,"7":0.0,"8":0.0,"9":0.1214620231,"10":0.1204110739,"11":0.0,"12":0.1194570059,"13":0.0014971676,"14":0.1184584731,"15":0.1212061305,"16":0.1221438778,"17":0.0,"18":0.1209991075,"19":0.0,"Label":"0":"17","1":"3","2":"17","3":"0","4":"14","5":"21","6":"16","7":"23","8":"20","9":"15","10":"14","11":"20","12":"14","13":"22","14":"13","15":"14","16":"15","17":"23","18":"14","19":"20","Probability":"0":1.0,"1":1.0,"2":1.0,"3":1.0,"4":1.0,"5":1.0,"6":1.0,"7":1.0,"8":1.0,"9":1.0,"10":1.0,"11":1.0,"12":1.0,"13":1.0,"14":1.0,"15":1.0,"16":1.0,"17":1.0,"18":0.9101796407,"19":1.0'
toy_data.head()
X Y Label Probability
0 0.127650 0.124108 17 1.0
1 0.024482 0.139424 3 1.0
2 0.126372 0.122501 17 1.0
3 0.024638 0.007708 0 1.0
4 0.110858 0.119837 14 1.0
sns.scatterplot(x = toy_data.X, y = toy_data.Y, hue = toy_data.Label.values, alpha = 0.5)
AttributeError: 'str' object has no attribute 'view'
此语法的类似异常:
sns.scatterplot(x = 'X', y = 'Y', data = toy_data, hue = 'Label', alpha = 0.5)
【问题讨论】:
检查这个:github.com/mwaskom/seaborn/issues/1515 您应该将'Label'
列更改为数字。这样大概就可以了。除非它们确实是分类的。
【参考方案1】:
这是 seaborn 的一个特殊问题,颜色 palette
需要等于标签的数量
sns.scatterplot(x = toy_data.X, y = toy_data.Y, hue = toy_data.Label, alpha = 0.5,
palette=sns.color_palette("Set1", toy_data.Label.nunique()) )
如果没有,seaborn 将应用数值函数将hue
类别的数量映射到默认的palette
四种颜色。这就是为什么当值是 string
【讨论】:
恕我直言,这应该是公认的答案,因为它不会强制色调为数字(考虑真正的分类数据,例如邮政编码)。以防万一还不够清楚:我们需要做的就是添加带有自定义颜色数量的调色板参数。【参考方案2】:如前所述,您的标签列是一个对象。它必须是一个数字(int 或 float)。
toy_data.info()
<class 'pandas.core.frame.DataFrame'>
Index: 20 entries, 0 to 9
Data columns (total 4 columns):
X 20 non-null float64
Y 20 non-null float64
Label 20 non-null object
Probability 20 non-null float64
dtypes: float64(3), object(1)
memory usage: 800.0+ bytes
这样做:
toy_data.loc[:,'Label'] = toy_data.Label.astype(np.float)
将其更改为浮动。
然后你的命令:
sns.scatterplot(x = toy_data.X, y = toy_data.Y, hue = toy_data.label.values, alpha = 0.5)
应该可以。
我正在使用这个命令来生成数据框
dict = "X":"0":0.12765045,"1":0.0244816152,"2":0.1263715245,"3":0.0246376768,"4":0.1108581319,"5":0.1406719382,"6":0.1358105564,"7":0.1245863432,"8":0.1175445352,"9":0.1188479018,"10":0.1113148159,"11":0.117455495,"12":0.110555662,"13":0.1328567106,"14":0.103064284,"15":0.1119474442,"16":0.119390455,"17":0.1246727756,"18":0.1117827155,"19":0.1169972547,"Y":"0":0.1241083714,"1":0.1394242378,"2":0.1225010796,"3":0.0077080173,"4":0.1198371354,"5":0.0029026989,"6":0.1259473297,"7":0.0,"8":0.0,"9":0.1214620231,"10":0.1204110739,"11":0.0,"12":0.1194570059,"13":0.0014971676,"14":0.1184584731,"15":0.1212061305,"16":0.1221438778,"17":0.0,"18":0.1209991075,"19":0.0,"Label":"0":"17","1":"3","2":"17","3":"0","4":"14","5":"21","6":"16","7":"23","8":"20","9":"15","10":"14","11":"20","12":"14","13":"22","14":"13","15":"14","16":"15","17":"23","18":"14","19":"20","Probability":"0":1.0,"1":1.0,"2":1.0,"3":1.0,"4":1.0,"5":1.0,"6":1.0,"7":1.0,"8":1.0,"9":1.0,"10":1.0,"11":1.0,"12":1.0,"13":1.0,"14":1.0,"15":1.0,"16":1.0,"17":1.0,"18":0.9101796407,"19":1.0
toy_data = pd.DataFrame(dict)
您需要 numpy import numpy as np
将值转换为浮点数
【讨论】:
不,色调变量可以是分类或数字。请参阅此处的文档seaborn.pydata.org/generated/seaborn.scatterplot.html以上是关于AttributeError:“str”对象在 Seaborn、散点图中没有属性“view”的主要内容,如果未能解决你的问题,请参考以下文章
AttributeError 'str' 对象没有属性 'path'
Pandas str.extract:AttributeError:'str'对象没有属性'str'
AttributeError:“str”对象没有属性“items”
Django-channels:AttributeError:'str'对象没有属性'profile'