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

Plotly控制坐标轴相对长度 实现等同Matlab pbaspect的正方形绘图

Plotly设置绘图为正方形(等效Matlab pbaspect([1 1 1]))的解决方案

你之前使用的scaleanchor+scaleratio=1的作用是让两个坐标轴的数值单位对应的物理长度相等,比如x轴每1个数值单位对应的像素长度和y轴完全一致。如果x轴数值范围是010、y轴是0100,那么y轴的物理长度会自动变成x轴的10倍,自然无法得到正方形的绘图区域。

以下是不同场景下的可用解决方案:

2D笛卡尔坐标图

方案1:动态计算scaleratio适配数值范围

无需手动调整整张图片尺寸,根据两个轴的数值范围差调整scaleratio即可实现绘图区域1:1等长:

# 也可以用fig.full_figure_for_development()获取Plotly自动生成的轴范围
x_range = fig.layout.xaxis.range[1] - fig.layout.xaxis.range[0]
y_range = fig.layout.yaxis.range[1] - fig.layout.yaxis.range[0]

fig.update_yaxes(
    scaleanchor = "x",
    scaleratio = y_range / x_range
)

方案2:直接约束轴的绘制区域比例

不需要计算数值范围,直接限制两个轴的绘制区域(domain)比例为1:1:

fig.update_layout(
    xaxis = {"constrain": "domain"},
    yaxis = {"scaleanchor": "x", "constrain": "domain"}
)

如果需要整张输出图片也为正方形,可额外添加配置:

fig.update_layout(width=500, height=500)

数值可根据需要自由调整,保持宽高相等即可。

3D坐标图

直接设置场景的坐标轴比例模式为立方体即可,完全等效Matlab的pbaspect([1 1 1])效果:

fig.update_layout(
    scene = {
        "aspectmode": "cube"
    }
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:57:02