Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pandas中,如何将数字类型转换为类别类型以与seaborn色调一起使用_Python_Pandas_Seaborn - Fatal编程技术网

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