如何在散点图中显示'id'(python matplotlib)

0 投票
1 回答
23 浏览
提问于 2025-04-14 16:22

我想在每个散点图上显示合适的ID(整数)。这些散点图放在一个3D图里面,但我尝试了很多方法就是无法实现。有没有人能帮帮我?

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.text(x, y, z, f"{i+1}", color='white', ha='center', va='center', fontsize=12)
        ax.scatter(x, y, z, color='black', s=150)
    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()

现在绘图是可以的,图形已经创建出来了,但散点图里面没有任何ID。

现在绘图是可以的,图形已经创建出来了,但散点图里面没有任何ID。

1 个回答

0

问题是你的散点图显示在了文字的下面。解决办法是通过 zorder 这个关键词来指定你想要文字显示在散点图的上面(可以参考这个 zorder 示例)。

你可以这样做:

ax.text(x, y, z, f"{i+1}", color='white', ha='center', va='center', fontsize=12, zorder=spawn_points.size)

这样就能确保所有的文字都显示在散点图的点上面。我假设你的 spawn_points 是一个 numpy 数组,如果不是的话,只需要把 zorder 设置得比点的数量大,就能得到你想要的效果。

撰写回答