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

如何在Matplotlib子图饼图中添加网格线?

解决Matplotlib饼图无法显示网格线的问题

问题原因

Matplotlib绘制饼图时,默认会自动隐藏子图的坐标轴(包括轴脊、刻度等元素),而网格线依附于坐标轴存在——没有坐标轴,自然无法显示网格线。你之前调用grid()或修改rcParams的操作之所以无效,核心原因就在这里。

解决方案

要让饼图显示网格线,核心是先恢复子图的坐标轴可见性,再开启网格线。同时可以调整饼图的大小/位置,避免和网格线过度重叠。

以下是优化后的完整代码(同时用循环简化了你原本重复的子图绘制逻辑):

import matplotlib.pyplot as plt
import numpy as np

# 模拟你的counts_list数据,替换成你自己的数组即可
counts_list = [np.random.randint(1, 10, size=3) for _ in range(8)]

fig, axes = plt.subplots(4, 2, figsize=(15, 15))

# 遍历所有子图和对应数据
for ax, counts in zip(axes.flat, counts_list):
    # 绘制饼图,缩小半径避免和网格重叠
    ax.pie(counts, radius=0.8)
    # 恢复坐标轴可见性(饼图默认会关闭坐标轴)
    ax.axis('on')
    # 开启网格线,自定义样式提升可读性
    ax.grid(True, linestyle='--', alpha=0.7)
    # 确保饼图保持圆形比例
    ax.set_aspect('equal')

plt.tight_layout()
plt.show()

关键细节说明

  • ax.axis('on'):强制显示子图的坐标轴,这是网格线能显示的必要前提;
  • radius=0.8:缩小饼图半径,避免饼图覆盖网格线;
  • linestyle='--', alpha=0.7:将网格线设为虚线并降低透明度,减少对饼图主体的干扰;
  • axes.flat:把二维的axes数组展平为一维,循环遍历更简洁,替代你原本逐个索引子图的冗余写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:46:10