如何使用Matplotlib绘制n=3降维结果的3D聚类散点图
3D聚类散点图实现方法
前置准备
先将t-SNE、PCA、TruncatedSVD三个降维算法的降维维度参数设置为n_components=3,重新运行降维流程,得到三个形状为(样本总量, 3)的三维降维结果数组:X_reduced_tsne、X_reduced_pca、X_reduced_svd。
代码修改逻辑
原有2D代码只需要调整两处核心逻辑即可适配3D绘图:
- 创建子图时传入
subplot_kw={'projection': '3d'},将三个坐标轴声明为3D投影类型 - 所有
scatter()散点绘制方法中,额外传入第三维度(数组索引为2的列)的坐标值 - 其余配色、图例、标题、网格的配置逻辑和2D版本完全一致,无需调整
修改后完整代码
import matplotlib.pyplot as plt import matplotlib.patches as mpatches # 创建1行3列的3D子图 f, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(24, 8), subplot_kw={'projection': '3d'}) f.suptitle('3D Clusters using Dimensionality Reduction', fontsize=14) # 图例配置 blue_patch = mpatches.Patch(color='#0A0AFF', label='No Fraud') red_patch = mpatches.Patch(color='#AF0000', label='Fraud') # t-SNE 3D散点图 ax1.scatter(X_reduced_tsne[:,0], X_reduced_tsne[:,1], X_reduced_tsne[:,2], c=(y == 0), cmap='coolwarm', label='No Fraud', linewidths=2) ax1.scatter(X_reduced_tsne[:,0], X_reduced_tsne[:,1], X_reduced_tsne[:,2], c=(y == 1), cmap='coolwarm', label='Fraud', linewidths=2) ax1.set_title('t-SNE', fontsize=14) ax1.grid(True) ax1.legend(handles=[blue_patch, red_patch]) # PCA 3D散点图 ax2.scatter(X_reduced_pca[:,0], X_reduced_pca[:,1], X_reduced_pca[:,2], c=(y == 0), cmap='coolwarm', label='No Fraud', linewidths=2) ax2.scatter(X_reduced_pca[:,0], X_reduced_pca[:,1], X_reduced_pca[:,2], c=(y == 1), cmap='coolwarm', label='Fraud', linewidths=2) ax2.set_title('PCA', fontsize=14) ax2.grid(True) ax2.legend(handles=[blue_patch, red_patch]) # TruncatedSVD 3D散点图 ax3.scatter(X_reduced_svd[:,0], X_reduced_svd[:,1], X_reduced_svd[:,2], c=(y == 0), cmap='coolwarm', label='No Fraud', linewidths=2) ax3.scatter(X_reduced_svd[:,0], X_reduced_svd[:,1], X_reduced_svd[:,2], c=(y == 1), cmap='coolwarm', label='Fraud', linewidths=2) ax3.set_title('Truncated SVD', fontsize=14) ax3.grid(True) ax3.legend(handles=[blue_patch, red_patch]) plt.tight_layout() plt.show()
补充说明:运行后生成的3D图支持鼠标拖拽旋转视角,可以从不同维度观察两类样本的聚类分布效果。
内容的提问来源于stack exchange,提问作者feruciform
相关产品推荐
相关产品推荐

