Python 在pandas中,如何将数字类型转换为类别类型以与seaborn色调一起使用
我被困在一个看似简单的问题上,试图在我正在创建的散点图上给不同的组着色。我有以下示例数据帧和图形:Python 在pandas中,如何将数字类型转换为类别类型以与seaborn色调一起使用,python,pandas,seaborn,Python,Pandas,Seaborn,我被困在一个看似简单的问题上,试图在我正在创建的散点图上给不同的组着色。我有以下示例数据帧和图形: test_df = pd.DataFrame({ 'A' : 1., 'B' : np.array([1, 5, 9, 7, 3], dtype='int32'), 'C' : np.array([6, 7, 8, 9, 3], dtype='int32'), 'D' : np.
test_df = pd.DataFrame({ 'A' : 1.,
'B' : np.array([1, 5, 9, 7, 3], dtype='int32'),
'C' : np.array([6, 7, 8, 9, 3], dtype='int32'),
'D' : np.array([2, 2, 3, 4, 4], dtype='int32'),
'E' : pd.Categorical(["test","train","test","train","train"]),
'F' : 'foo' })
# fix to category
# test_df['D'] = test_df["D"].astype('category')
# and test plot
f, ax = plt.subplots(figsize=(6,6))
ax = sns.scatterplot(x="B", y="C", hue="D", s=100,
data=test_df)
这将创建此图表:
但是,我希望为这3个类别中的每一个都提供一个分类量表,而不是一个连续的量表[2,3,4]。在我取消注释代码行test_df['D']=…
后,要将此列更改为seaborn绘图中类别着色的类别列类型,我从seaborn绘图收到以下错误:TypeError:数据类型未理解
是否有人知道将此数字列转换为用于着色的因子/分类列的正确方法
谢谢 我复制/粘贴了您的代码,添加了导入库,并删除了注释,因为我认为它看起来不错。我得到了一个值为[2,3,4]的带有“分类”颜色的绘图,而不改变任何代码 尝试使用以下命令更新seaborn模块:
pip安装--升级seaborn
下面是代码使用的工作库的列表
matplotlib==3.1.2
numpy==1.18.1
seaborn==0.10.0
pandas==0.25.3
。。。它在下面的代码中执行
将熊猫作为pd导入
将numpy作为np导入
将matplotlib.pyplot作为plt导入
导入seaborn作为sns
test_df=pd.DataFrame({'A':1。,
“B”:np.array([1,5,9,7,3],dtype='int32'),
'C':np.array([6,7,8,9,3],dtype='int32'),
'D':np.array([2,2,3,4,4],dtype='int32'),
“E”:pd.分类([“测试”、“训练”、“测试”、“训练”、“训练”),
‘F’:‘foo’})
#固定到类别
test_df['D']=test_df['D'].aType('category'))
#试验区
f、 ax=plt.子批次(图尺寸=(6,6))
ax=sns.散点图(x=“B”,y=“C”,hue=“D”,s=100,
数据=测试(df)
plt.show()
我复制/粘贴了您的代码,添加了用于导入的库,并删除了注释,因为我认为它看起来不错。我得到了一个值为[2,3,4]的带有“分类”颜色的绘图,而不改变任何代码
尝试使用以下命令更新seaborn模块:pip安装--升级seaborn
下面是代码使用的工作库的列表
matplotlib==3.1.2
numpy==1.18.1
seaborn==0.10.0
pandas==0.25.3
。。。它在下面的代码中执行
将熊猫作为pd导入
将numpy作为np导入
将matplotlib.pyplot作为plt导入
导入seaborn作为sns
test_df=pd.DataFrame({'A':1。,
“B”:np.array([1,5,9,7,3],dtype='int32'),
'C':np.array([6,7,8,9,3],dtype='int32'),
'D':np.array([2,2,3,4,4],dtype='int32'),
“E”:pd.分类([“测试”、“训练”、“测试”、“训练”、“训练”),
‘F’:‘foo’})
#固定到类别
test_df['D']=test_df['D'].aType('category'))
#试验区
f、 ax=plt.子批次(图尺寸=(6,6))
ax=sns.散点图(x=“B”,y=“C”,hue=“D”,s=100,
数据=测试(df)
plt.show()
我遇到了相同的错误TypeError:数据类型无法理解
。
解决方法是使用选项legend=“full”
。在这种方法中,不需要转换为分类类型:
ax = sns.scatterplot(x="B", y="C", hue="D", s=100, legend="full", data=test_df)
另一种解决方案是使用自定义调色板:
ax = sns.scatterplot(x="B", y="C", hue="D", s=100, palette=["b", "g", "r"], data=test_df)
在这种情况下,颜色的数量必须等于“D”列中的唯一值。我遇到了相同的错误
TypeError:data type not knowledged
。
解决方法是使用选项legend=“full”
。在这种方法中,不需要转换为分类类型:
ax = sns.scatterplot(x="B", y="C", hue="D", s=100, legend="full", data=test_df)
另一种解决方案是使用自定义调色板:
ax = sns.scatterplot(x="B", y="C", hue="D", s=100, palette=["b", "g", "r"], data=test_df)
在这种情况下,颜色数必须等于“D”列中的唯一值。建议使用catplot而不是散点图。。。它应该适当渲染。在seaborn的页面上看一下这里。您可能不需要f,ax=plt。子图(figsize=(6,6))线建议使用catplot而不是散点图。。。它应该适当渲染。在seaborn的页面上看一下这里。您可能不需要f,ax=plt.subplot(figsize=(6,6))行