You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

seaborn scatterplot绘制DBSCAN聚类结果报错pos_x无法识别

报错原因

你遇到的ValueError: Could not interpret value 'pos_x' for parameter 'x'核心原因是数据类型不匹配:

  • 你通过.to_numpy()把筛选出的pos_x、pos_y两列从pandas DataFrame转成了numpy数组,numpy数组不存在列名属性
  • 当你给sns.scatterplot的x、y参数传入字符串列名时,seaborn要求data参数必须是带列名索引的结构化数据(如pandas DataFrame),无法在numpy数组中匹配到对应列名,就会触发该报错。
修复方法

二选一即可:

方案1:保留DataFrame结构(最贴合你原本的代码逻辑)

去掉.to_numpy()调用,直接用带列名的DataFrame做聚类和绘图输入,修改后可运行代码如下:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN

dataset = pd.read_csv(r'/Users/file_name.csv')
# 移除.to_numpy(),保留DataFrame的列名信息
Data = dataset[["pos_x","pos_y"]]
dbscan = DBSCAN()
clusters = dbscan.fit(Data)
p = sns.scatterplot(data=Data, x="pos_x", y="pos_y", hue=clusters.labels_, legend="full", palette="deep")
sns.move_legend(p, "upper right", bbox_to_anchor=(1.17, 1.2), title='Clusters')
plt.show()

方案2:保留numpy数组格式,直接传入列数据

如果你后续处理必须用numpy数组格式,绘图时就不要给x、y传字符串列名,直接传入numpy数组对应的列切片即可:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN

dataset = pd.read_csv(r'/Users/file_name.csv')
Data = dataset[["pos_x","pos_y"]].to_numpy()
dbscan = DBSCAN()
clusters = dbscan.fit(Data)
# numpy数组第0列为pos_x,第1列为pos_y,直接传入数组即可
p = sns.scatterplot(x=Data[:, 0], y=Data[:, 1], hue=clusters.labels_, legend="full", palette="deep")
sns.move_legend(p, "upper right", bbox_to_anchor=(1.17, 1.2), title='Clusters')
plt.show()

补充说明:DBSCAN的fit方法既支持pandas DataFrame输入,也支持numpy数组输入,两种改法都不会影响聚类结果。

内容的提问来源于stack exchange,提问作者ttina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:54:34