Jupyter中Python代码无法显示3D聚类图问题求助
问题原因及解决方法
核心问题1:重复使用同一特征作为两个坐标轴
你代码里的3D散点图调用:
ax.scatter(X[:, 0], X[:, 4], X[:, 4], c=asignar,s=10) ax.scatter(C[:, 0], C[:, 4], C[:, 4], marker='*', c=colores, s=10)
这里y轴和z轴用的是同一个特征(X[:,4]),所有点都会落在y=z的平面上。如果Jupyter的3D图初始视角刚好正对这个平面,就会显示成空白。
解决:把z轴换成数据集里的另一个不同特征,比如X[:,1]或其他列,示例:
ax.scatter(X[:, 0], X[:, 4], X[:, 1], c=asignar,s=10) ax.scatter(C[:, 0], C[:, 4], C[:, 1], marker='*', c=colores, s=10)
核心问题2:缺少显式的图像渲染指令
虽然Jupyter部分环境会自动渲染图像,但添加plt.show()能确保图像正常显示,尤其是在%matplotlib notebook模式下。在绘图代码末尾加上:
plt.show()
可选优化:更新3D轴的创建方式
新版本matplotlib推荐用add_subplot创建3D轴,替代旧的Axes3D(fig)写法,避免兼容性问题:
fig = plt.figure() ax = fig.add_subplot(projection='3d') # 替换原来的ax = Axes3D(fig)
额外排查步骤
- 检查数据范围:运行
print(pd.DataFrame(X).describe()),确认各特征的数值范围是否差异过大(比如某列数值是其他列的1000倍),如果是,先对数据做标准化(from sklearn.preprocessing import StandardScaler; X = StandardScaler().fit_transform(X))再绘图。 - 切换绘图后端:如果
%matplotlib notebook还是有问题,可以尝试换成%matplotlib inline(静态图)或%matplotlib widget(交互式,部分环境支持)。
内容的提问来源于stack exchange,提问作者Another.Chemist
相关产品推荐
相关产品推荐

