如何在单张3D散点图中绘制两个pandas DataFrame并区分颜色
核心实现思路
无需改动原有代码的基础绘图框架,只需要在同一个已创建的3D坐标轴对象ax上,分别对两个独立DataFrame执行两次scatter绘制操作即可。Matplotlib的3D坐标轴会自动将两次绘制的内容叠加在同一画布上,通过给两次绘制设置不同的颜色、不同的图例标识,就能清晰区分两组数据。
调整后的完整可运行代码
import seaborn as sns import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 假设你用于绘图的两个独立DataFrame分别为 df1、df2 sns.set(style="darkgrid") fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 提取并绘制第一组DataFrame的三维数据 x1 = df1['xitem'] y1 = df1['yitem'] z1 = df1['zitem'] # 指定第一组数据为蓝色,设置对应图例标签 ax.scatter(x1, y1, z1, color='#1f77b4', label='第一组数据') # 提取并绘制第二组DataFrame的三维数据 x2 = df2['xitem'] y2 = df2['yitem'] z2 = df2['zitem'] # 指定第二组数据为橙色,和第一组颜色形成明显视觉区分 ax.scatter(x2, y2, z2, color='#ff7f0e', label='第二组数据') # 设置共用的坐标轴标签,两组数据共享同一套坐标系 ax.set_xlabel("X Label") ax.set_ylabel("Y Label") ax.set_zlabel("Z Label") # 显示图例,明确不同颜色对应的数据集 ax.legend() plt.show()
实操注意事项
- 颜色配置无强制要求:可以替换为任意你需要的色值,不管是十六进制色值、matplotlib预设的颜色名称,只要两次scatter传入的
color参数存在明显视觉差异即可 - 适配自身列名:如果两个DataFrame的三维列名不完全一致,只需要把代码里
df['列名']部分替换为你实际的列名即可,不需要强制统一列名 - 避免冗余操作:坐标轴标签只需要设置一次,反复设置不会报错但属于无效代码;不需要为第二个数据集新建画布、新建子图,始终操作同一个
ax对象就能保证内容绘制在同一张图上 - 图例不要遗漏:如果不调用
ax.legend(),读者无法区分两种颜色对应的数据集,实际使用时建议把label值设置为能代表数据集含义的文本,比如“训练集”“测试集”之类的
内容的提问来源于stack exchange,提问作者wavethedeep
相关产品推荐
相关产品推荐

