如何在Python Matplotlib的3D散点图中显示ID标识
解决3D散点图内部显示整数ID的问题
你的代码里ID文本没显示的核心原因是绘图顺序搞反了:先绘制的白色文本被后绘制的黑色散点完全遮挡,就算没全挡住也很难看清。
修复后的代码
def generate_3d_plot(spawn_points, minmax_x, minmax_y, minmax_z, output_filename, map_id): fig = plt.figure(figsize=(9, 7), dpi=300) ax = fig.add_subplot(111, projection='3d') ax.view_init(elev=25, azim=45) for i, (x, y, z) in enumerate(spawn_points): # 先画散点,再在散点上方绘制文本 ax.scatter(x, y, z, color='black', s=150) ax.text(x, y, z, f"{i+1}", color='white', ha='center', va='center', fontsize=10) ax.set_xlim(*minmax_x) ax.set_ylim(*minmax_y) ax.set_zlim(*minmax_z) ax.grid(True, which='both', ls="--", linewidth=0.5, color='grey') ax.set_axisbelow(False) plt.savefig(output_filename, bbox_inches='tight') plt.close()
关键改动说明
- 调换
ax.scatter()和ax.text()的执行顺序:让散点先绘制,文本叠加在散点上方,避免被遮挡 - 微调字体大小(从12改为10),让ID能更好适配散点尺寸
- 如果想进一步提升文本清晰度,可以给文本加个紧凑的黑色背景框:
# 带背景框的文本绘制方式 ax.text(x, y, z, f"{i+1}", color='white', ha='center', va='center', fontsize=10, bbox=dict(facecolor='black', edgecolor='none', pad=0.3))
内容的提问来源于stack exchange,提问作者Jordy
相关产品推荐
相关产品推荐

