如何用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
相关产品推荐
相关产品推荐

