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

高维多类别数据集散点图绘制维度不匹配报错解决咨询

问题原因与解决方法

错误根源

plt.scatter() 要求前两个输入参数是长度相同的一维数组(分别对应散点图的x轴和y轴特征),但你传入的x是包含20个特征的二维数组(形状(100000, 20)),和一维的目标变量y(形状(100000,))维度不匹配,因此触发错误。

解决方案

根据你展示所有特征多类别分布的需求,提供三种实用方案:

方案1:绘制所有特征两两组合的散点图(适合特征数不多的情况)

用Seaborn的pairplot可以自动生成所有特征对的散点图,并按类别着色:

import seaborn as sns
import matplotlib.pyplot as plt

# 将特征与目标合并为一个DataFrame
plot_df = train_df.copy()
# 生成两两特征散点图,hue指定按目标类别着色
sns.pairplot(plot_df, hue='y', palette='tab10', plot_kws={'s': 10})
plt.show()
  • hue='y':按目标列的类别区分颜色
  • plot_kws={'s':10}:设置散点大小,避免点过于密集

方案2:高维特征降维后绘制二维散点图(适合特征数较多的情况)

当特征数较多时,直接画两两组合图会过于繁琐,可以用PCA或t-SNE将20维特征压缩到二维,再绘制类别分布:

示例(PCA降维):

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

x = train_df.drop(['y'], axis=1)
y = train_df['y']

# 将20维特征降为2维
pca = PCA(n_components=2)
x_2d = pca.fit_transform(x)

# 按类别分别绘制散点
unique_classes = y.unique()
# 为5个类别分配不同颜色
color_list = ['red', 'green', 'blue', 'cyan', 'magenta']

for cls, color in zip(unique_classes, color_list):
    # 筛选当前类别的样本
    class_mask = (y == cls)
    plt.scatter(x_2d[class_mask, 0], x_2d[class_mask, 1], 
                s=10, label=f'类别 {cls}', color=color)

plt.legend()
plt.xlabel('PCA 第一主成分')
plt.ylabel('PCA 第二主成分')
plt.title('特征PCA降维后的类别分布')
plt.show()

如果想更简洁,也可以直接用c=y让matplotlib自动映射颜色:

plt.scatter(x_2d[:, 0], x_2d[:, 1], c=y, s=10, cmap='tab10')
plt.colorbar(ticks=y.unique(), label='类别')
plt.xlabel('PCA 第一主成分')
plt.ylabel('PCA 第二主成分')
plt.show()

方案3:单独绘制某两个特征的散点图

如果你只想查看特定两个特征的类别分布,直接指定特征列即可:

plt.scatter(x.iloc[:, 0], x.iloc[:, 1], c=y, s=10, cmap='tab10')
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.colorbar(ticks=y.unique(), label='类别')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:50:25