我想在每个散点图中显示适当的 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。
问题是您的分散显示在文本上。 解决方案是通过
zorder
关键字指定您希望文本位于散点图的顶部(请参阅 zorder demo)。
你可以做类似的事情
ax.text(x, y, z, f"{i+1}", color='white', ha='center', va='center', fontsize=12, zorder=spawn_points.size)
它指定所有文本显示在所有散点的顶部。 我假设你
spawn_points
是一个 numpy 数组,否则只需将 zorder 大于点数,你就会获得所需的结果。