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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:35:59