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

如何实现Matplotlib饼图并排展示?含6个饼图布局方案

解决饼图并排显示及多饼图布局问题

两个饼图并排的修改方案

你需要利用matplotlib的**子图(subplot)**功能实现并排布局,核心是通过plt.subplots()创建网格状的子图容器,再将每个饼图绘制到对应子图上。修改后的代码如下:

import matplotlib.pyplot as plt

# 创建1行2列的子图布局,fig是画布,axes是子图数组
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))  # figsize调整整体画布大小

# 在第一个子图绘制Gender饼图
data["Gender"].value_counts().plot.pie(autopct="%.1f%%", ax=axes[0])
axes[0].set_title("Gender Distribution")  # 设置子图标题

# 在第二个子图绘制Education_Level饼图
data["Education_Level"].value_counts().plot.pie(autopct="%.1f%%", ax=axes[1])
axes[1].set_title("Education Level Distribution")

# 调整子图间距,避免标签重叠
plt.tight_layout()
plt.show()

扩展到6个饼图的实现

当需要展示6个饼图时,只需调整子图的行数和列数,比如采用2行3列或3行2列的布局,示例代码如下(以2行3列为例):

import matplotlib.pyplot as plt

# 假设你有6个需要展示的字段,这里用示例字段名
fields = ["Gender", "Education_Level", "Marital_Status", "Income_Range", "Occupation", "Region"]

# 创建2行3列的子图布局
fig, axes = plt.subplots(nrows=2, ncols=3, figsize=(15, 10))

# 将axes数组展平,方便循环遍历(2x3的数组展平后是1维的6个元素)
axes = axes.flatten()

# 循环绘制每个饼图
for idx, field in enumerate(fields):
    data[field].value_counts().plot.pie(autopct="%.1f%%", ax=axes[idx])
    axes[idx].set_title(f"{field} Distribution")

plt.tight_layout()
plt.show()

关键说明

  • plt.subplots(nrows, ncols):指定子图的行数和列数,返回的axes是二维数组(行数或列数大于1时),用flatten()可转为一维数组简化循环。
  • ax=axes[idx]:指定饼图绘制到对应子图上,这是实现多图布局的核心参数。
  • figsize:根据饼图数量调整画布大小,避免图表过于拥挤。
  • plt.tight_layout():自动调整子图间距,防止标题、饼图标签互相重叠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:27:33