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

Plotly:如何修改曲面子图的Z轴范围

修改Plotly曲面子图的Z轴范围

你遇到的问题核心是:Plotly子图中每个曲面的Z轴都有独立的布局标识(比如zaxis1对应第1行第1列子图,zaxis2对应第1行第2列,以此类推到zaxis16),直接全局调用update_layout没法自动应用到所有子图的Z轴上。

下面是两种可行的解决方法:

方法一:统一设置所有子图的Z轴范围

如果所有子图需要相同的Z轴范围,可以通过循环生成布局参数,一次性更新:

import plotly.graph_objects as go
from plotly.subplots import make_subplots
import numpy as np

main_fig = make_subplots(
    rows=4, 
    cols=4,
    specs=[[{'type': 'surface'} for _ in range(4)] for _ in range(4)],
    horizontal_spacing=0.05,
    vertical_spacing=0.05
)

axis = np.arange(50)
for k in range(16):
    z_data = axis[:, None] * axis[None, :]
    fig = go.Surface(x=axis, y=axis, z=z_data, showscale=False)
    main_fig.append_trace(fig, row=k//4 + 1, col=k%4 + 1)

# 统一设置所有Z轴的范围(这里设为0到2000,可根据需求调整)
z_range = [0, 2000]
layout_updates = {}
for i in range(1, 17):
    layout_updates[f'zaxis{i}.range'] = z_range

main_fig.update_layout(**layout_updates)
main_fig.update_traces(showlegend=False)
main_fig.update_layout(height=800, width=800)
main_fig.show()

方法二:单独设置每个子图的Z轴范围

如果不同子图需要不同的Z轴范围,可以在循环添加 trace 时,针对每个子图单独配置:

import plotly.graph_objects as go
from plotly.subplots import make_subplots
import numpy as np

main_fig = make_subplots(
    rows=4, 
    cols=4,
    specs=[[{'type': 'surface'} for _ in range(4)] for _ in range(4)],
    horizontal_spacing=0.05,
    vertical_spacing=0.05
)

axis = np.arange(50)
for k in range(16):
    z_data = axis[:, None] * axis[None, :]
    fig = go.Surface(x=axis, y=axis, z=z_data, showscale=False)
    main_fig.append_trace(fig, row=k//4 + 1, col=k%4 + 1)
    # 针对当前子图的Z轴设置范围,比如按子图索引设置不同范围
    z_axis_id = f'zaxis{k+1}'
    main_fig.update_layout({f'{z_axis_id}.range': [0, (k+1)*150]})

main_fig.update_traces(showlegend=False)
main_fig.update_layout(height=800, width=800)
main_fig.show()

关键说明

  • Plotly子图的每个轴命名规则是:zaxis{序号},序号从1开始,按行优先顺序排列(第1行1列是zaxis1,第1行2列zaxis2...第4行4列zaxis16)
  • 通过字典推导或循环生成布局参数,再用**解包传入update_layout,可以批量修改所有子图的轴属性
  • 也可以直接在update_layout中逐个指定,比如update_layout(zaxis1_range=[0,2000], zaxis2_range=[0,2000], ...),但循环方式更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:05:17