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

如何在Matplotlib中实现子图内嵌套横向子图(基于DataFrame列模式)

解决方案

要实现每个模式对应的子图拆分为6个横向独立子图(每个图例对应一个子图),你需要调整子图网格结构,并单独绘制每一列的曲线,具体修改如下:

修改后的代码

import matplotlib.pyplot as plt
col_patterns = ['pattern1','pattern2']
# 调整子图网格:每行对应一个pattern,每行6个横向子图
fig, axs = plt.subplots(nrows=len(col_patterns), ncols=6, figsize=(30, 80))
plt.subplots_adjust(hspace=0.3, wspace=0.2)  # 调整子图间距,避免重叠
fig.suptitle("Title", fontsize=18, y=0.95)

for idx, col_pat in enumerate(col_patterns):
    # 获取当前pattern对应的所有列
    col_pat_columns = [col for col in df.columns if col_pat in col]
    # 遍历当前行的每个子图和对应的列
    for ax, col in zip(axs[idx], col_pat_columns):
        # 单独绘制当前列的曲线
        df.plot(x='Week', y=col, ax=ax, legend=False)
        # 子图格式设置
        ax.set_title(f"{col_pat.upper()} - {col}")
        ax.set_xlabel("")

# 如果某个pattern的列数不足6,可以隐藏多余的空图
for idx in range(len(col_patterns)):
    current_cols = [col for col in df.columns if col_patterns[idx] in col]
    for ax in axs[idx][len(current_cols):]:
        ax.axis('off')

关键修改点

  • 子图网格调整:将ncols=1改为ncols=6,让每个pattern对应一行6个横向子图,整体形成2行6列的布局(对应你的2个pattern)。
  • 单曲线独立绘制:不再一次性绘制所有曲线,而是遍历每个目标列,在对应的子图中单独绘制该列数据,确保每个子图只展示一条曲线。
  • 空图处理:如果某个pattern对应的列数不足6,隐藏多余的空子图,避免界面杂乱。
  • 间距优化:通过plt.subplots_adjust()设置合适的间距,防止标题和坐标轴重叠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:18:19