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

如何基于多个DataFrame绘制仅共享Y轴的并排柱状图

解决方案

核心通过plt.subplots的sharey=True参数实现所有子图Y轴共享,同时将绘图配置统一管理,方便后续新增数据集。

完整可运行代码

from matplotlib import pyplot as plt
import pandas as pd

# 构造原始数据
fruits = {"Apple": 10, "Banana": 9, "Mango": 5, "Orange": 1}
beverages = {"Coca-cola": 15, "Pepsi": 12, "Seven-up": 9, "Root-bear": 3}
foods = {'hamburger': 10, 'pizza': 7, 'pasta': 5, 'sushi': 2}

# 转换为DataFrame
fruits_df = pd.DataFrame(fruits.items(), columns = ['stuffs', 'freq'])
beverages_df = pd.DataFrame(beverages.items(), columns = ['stuffs', 'freq'])
foods_df = pd.DataFrame(foods.items(), columns = ['stuffs', 'freq'])

# 绘图配置统一管理:(DataFrame, 子图标题, 柱状图颜色)
# 后续新增零食、服饰等类别,只需往该列表添加对应配置即可
plot_config = [
    (fruits_df, 'fruits', '#1f77b4'),
    (beverages_df, 'beverages', '#ff7f0e'),
    (foods_df, 'foods', '#2ca02c')
]

# 创建1行N列的子图,开启Y轴共享
fig, axes = plt.subplots(nrows=1, ncols=len(plot_config), figsize=(18, 6), sharey=True)

# 循环绘制每个子图
for ax, (df, title, color) in zip(axes, plot_config):
    df.plot(x='stuffs', y='freq', kind='bar', ax=ax, legend=False, color=color)
    ax.set_title(title, fontsize=12)
    ax.tick_params(axis='x', rotation=45, labelright=False)
    ax.set_xlabel('')

# 仅首个子图显示Y轴标签
axes[0].set_ylabel('freq', fontsize=12)

# 自动调整布局避免标签重叠
plt.tight_layout()
plt.show()

特性说明

  • 自动对齐Y轴刻度,仅最左侧子图显示Y轴标签,完全匹配期望的仅共享Y轴并排布局
  • 扩展性极强,后续新增类别无需修改绘图逻辑,只需构造好对应DataFrame,往plot_config列表新增一条配置即可
  • 所有子图样式统一管理,不会出现格式不一致的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:45:04