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

如何在Python的Matplotlib中绘制轴长相等的3D几何图形?

解决Matplotlib 3D绘图中X/Y/Z轴等长的问题

Matplotlib的3D轴默认会根据数据范围自动调整显示比例,导致视觉上轴长不等。要实现三个轴长度相等,只需在代码中添加轴比例设置即可,具体方案如下:

推荐方案(Matplotlib 3.3+版本)

使用set_box_aspect方法直接指定三个轴的显示比例为1:1:1,这是官方推荐的3D轴等长设置方式:

def plotting(x, y, z, figname):
    fig = plt.figure(figsize = (50,50))
    ax = plt.axes(projection='3d')
    ax.grid()

    # 核心:设置X/Y/Z轴显示比例为1:1:1
    ax.set_box_aspect([1, 1, 1])

    ax.scatter(x, y, z, c = 'r', s = 50)
    ax.set_title(figname)

    ax.set_xlabel('x', labelpad=20)
    ax.set_ylabel('y', labelpad=20)
    ax.set_zlabel('z', labelpad=20)

兼容旧版本方案(Matplotlib <3.3)

如果你的Matplotlib版本较低,set_box_aspect不可用,可以手动计算数据范围并统一各轴的显示区间:

import numpy as np

def plotting(x, y, z, figname):
    fig = plt.figure(figsize = (50,50))
    ax = plt.axes(projection='3d')
    ax.grid()

    # 计算数据的最大范围,统一各轴显示区间
    max_range = np.array([x.max()-x.min(), y.max()-y.min(), z.max()-z.min()]).max()
    x_center = x.mean()
    y_center = y.mean()
    z_center = z.mean()
    ax.set_xlim(x_center - max_range/2, x_center + max_range/2)
    ax.set_ylim(y_center - max_range/2, y_center + max_range/2)
    ax.set_zlim(z_center - max_range/2, z_center + max_range/2)

    ax.scatter(x, y, z, c = 'r', s = 50)
    ax.set_title(figname)

    ax.set_xlabel('x', labelpad=20)
    ax.set_ylabel('y', labelpad=20)
    ax.set_zlabel('z', labelpad=20)

内容的提问来源于stack exchange,提问作者Urvesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:05:23