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

Plotly(Python)绘制3D曲面图出现拉伸变形问题求助

解决Plotly 3D曲面图高度方向拉伸的问题

你碰到的这个问题其实挺典型的——调整画布的width和height只是改变整个图表的外部容器尺寸,并不会影响3D坐标系里各轴的比例关系。默认情况下,Plotly的3D场景会用aspectmode='auto'模式,根据你的数据范围自动缩放轴,这就导致z轴因为数据范围和x、y轴差异较大,被过度拉伸变形。

两种实用的解决方案:

1. 强制使用等比例坐标系(Cube模式)

通过给3D场景设置aspectmode='cube',让三个轴保持相同的视觉比例,就能立刻解决拉伸问题:

import plotly.graph_objects as go
import numpy as np

x_test_d1 = np.linspace(-4,4,100)
x_test_d2 = np.linspace(-3,3,100)
grid_d1, grid_d2 = np.meshgrid(x_test_d1,x_test_d2)
z = 1.5*np.sin(grid_d1) - 0.1*(grid_d1-3)**2 +10 - 0.5*(grid_d2**2-2) + np.sin(grid_d2)*2

fig = go.Figure(data=[go.Surface(x=grid_d1, y=grid_d2, z=z)])
fig.update_layout(
    margin=dict(l=20, r=20, t=20, b=20), 
    width=800, 
    height=400,
    scene=dict(
        aspectmode='cube'  # 关键设置:强制三轴等比例显示
    )
)
fig.show()

2. 手动自定义轴比例

如果你不想严格等比例,也可以通过aspectratio手动设置x、y、z轴的视觉比例,比如结合你的数据范围来调整:

# 先查看z轴的数据范围,方便设置比例
print(f"z轴范围:{z.min()} 到 {z.max()}")

fig.update_layout(
    margin=dict(l=20, r=20, t=20, b=20), 
    width=800, 
    height=400,
    scene=dict(
        aspectratio=dict(x=8/6, y=1, z=1.5),  # x轴范围8(-4到4),y轴范围6(-3到3),z轴比例按需调整
        aspectmode='manual'
    )
)

补充说明:

  • aspectmode还有其他可选值:data会严格按照各轴的数据范围比例显示;auto是默认的自动适配模式,也是导致你问题的原因。
  • 如果用data模式,Plotly会自动匹配数据范围的比例,比如你的x轴范围是8,y是6,z如果范围是3,那么比例会自动设为8:6:3,视觉上也不会拉伸。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:22:29