【发布时间】:2019-03-23 21:29:21
【问题描述】:
我正在尝试在 Python 3.6.5 下使用 Seaborn 0.9.0 绘制一些简单的数据。数据只是彼此分类不同的两个点。分类本身就是1 或2。然而,当我用 Seaborn 绘制它时,图例显示了三种类型:0、1 和 2。
import numpy
import seaborn
import pandas
from matplotlib import pyplot
X = numpy.array([
[-1, -1, 1],
[1, 1, 2]
])
data = pandas.DataFrame(X, columns=('x','y','type'))
seaborn.scatterplot(data=data, x='x', y='y', hue='type')
pyplot.show()
结果图显示:
我也尝试过不使用 Pandas,只使用例如 x=X[:,0], y=X[:,1], hue=X[:,2],但结果是一样的。
Seaborn 文档是这样评价 hue 参数的:
可以是分类的也可以是数字的,尽管在后一种情况下颜色映射的行为会有所不同。
但他们没有阐明“分类”是什么意思,或者行为是什么,或者它有什么不同。我也读过categorical data plotting tutorial,但没有找到答案。
在数据中使用'1' 和'2' 之类的字符串只会导致错误:
AttributeError: 'str' object has no attribute 'view'
为什么在图例中有一个额外的“类型”0?而且,以后如何才能有更有意义的类别标签?
又读了categorical data plotting tutorial,我发现了这个:
如果您的数据具有 pandas Categorical 数据类型,则可以在此处设置类别的默认顺序。如果传递给分类轴的变量看起来是数字的,则级别将被排序。但数据仍被视为分类数据并绘制在分类轴上的序数位置(特别是在 0、1、...),即使使用数字来标记它们:
这部分解释了这里发生的事情(不是为什么会有额外的 0 类别),但即使使用 Pandas 分类类型也无济于事。添加
data['type'] = data['type'].astype('category')
...将此数据转换为分类类型,但Seaborn仍然报错:
TypeError: data type not understood
【问题讨论】:
-
一个问题在技术上是重复的很好的例子,但问题似乎完全不同。
-
问题在技术上是重复的,但其他问题/答案对我没有帮助。这篇文章做到了!