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

