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

如何用Plotly创建首行1个、次行2个的非矩形子图布局?

Plotly实现非矩形子图布局的方法

当然可以实现这种布局,你只需要利用plotly.subplots.make_subplots的specs参数,通过设置子图的**跨列(colspan)**属性来实现首行单个大子图、第二行两个并排子图的效果,无需局限于严格的矩形网格。

具体实现代码示例

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

# 创建子图布局:2行2列,首行子图跨2列
fig = make_subplots(
    rows=2, cols=2,
    specs=[[{"colspan": 2}, None],  # 首行第一个子图跨2列,第二个位置留空
           [{}, {}]]  # 第二行两个正常子图
)

# 向首行大子图添加内容
fig.add_trace(
    go.Scatter(x=[1, 2, 3], y=[4, 5, 6], name="首行大子图"),
    row=1, col=1
)

# 向第二行第一个子图添加内容
fig.add_trace(
    go.Bar(x=[1, 2, 3], y=[2, 3, 1], name="第二行左子图"),
    row=2, col=1
)

# 向第二行第二个子图添加内容
fig.add_trace(
    go.Pie(labels=["A", "B", "C"], values=[30, 40, 30], name="第二行右子图"),
    row=2, col=2
)

# 调整布局样式
fig.update_layout(height=600, width=800, title_text="非矩形子图布局示例")
fig.show()

关键参数说明

  • specs参数是一个二维列表,每个元素对应网格中的一个单元格,用字典定义该单元格的属性:
    • colspan=2表示当前子图横跨2列,这样首行的两个网格位置会被合并成一个大子图
    • 首行的第二个位置设为None,表示该位置不放置子图
  • 添加子图时,首行的子图只需指定row=1, col=1即可,因为它已经跨列覆盖了整个首行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:02:06