如何在散点图中显示'id'(python matplotlib)
我想在每个散点图上显示合适的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 设置得比点的数量大,就能得到你想要的效果。