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

如何使用Matplotlib subplot实现左计数图右饼图的双面板布局

原有代码的问题
  • 子图网格参数逻辑混乱:左右排布两个图表对应1行2列的子图网格,原代码先后使用2,1,1(对应2行1列上下布局的第一个位置)、2,2,1(对应2行2列布局的第一个位置)的参数,不符合左右排布的需求
  • 轴对象绑定错误:初始创建的ax1是单画布默认轴,后续调用countplot、pie方法时没有将绘图操作绑定到对应子图的轴对象上,会导致图表渲染位置错乱
  • 存在冗余调用:最后一行plt.subplot(2,2,1)没有绑定实际绘图逻辑,会额外生成空子图层,打乱整体布局
正确实现代码
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

# --------------- 测试用示例数据,实际使用时替换为你自己的df即可
# df = pd.DataFrame({'data_si_o_no': [0]*820 + [1]*180})
# ---------------

# 创建1行2列的子图布局,figsize可根据需要调整整体画布宽高
fig, (ax_count, ax_pie) = plt.subplots(nrows=1, ncols=2, figsize=(12, 5))

# 左侧绘制计数图,显式绑定到左轴
sns.countplot(x=df['data_si_o_no'], ax=ax_count)
ax_count.set_xlabel('Disaster Tag')
ax_count.set_ylabel('Sample Count')

# 右侧绘制饼图,显式绑定到右轴
ax_pie.pie(
    df['data_si_o_no'].value_counts(),
    labels=['Not Disaster', 'Disaster'],
    autopct='%1.2f%%',
    shadow=True,
    explode=(0.05, 0),
    startangle=60
)
ax_pie.axis('equal') # 保证饼图显示为正圆形,不会被画布拉伸变形

# 设置总标题
fig.suptitle('Distribution of the data', fontsize=24)
# 自动调整边距和子图间距,避免文字、图表重叠
plt.tight_layout()
plt.show()
自定义配置说明
  • 如果需要调整两个子图的宽度比例,可以在plt.subplots()中添加参数gridspec_kw={'width_ratios': [1.2, 0.8]},数值越大对应位置的子图占比越宽
  • 不需要保留测试数据段,直接传入你自己的DataFrame即可运行
  • 可以通过ax_count.set_title()、ax_pie.set_title()分别给两个子图加单独的标题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:48:23