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

如何在Matplotlib饼图中分离两个占比较小的数值

解决饼图小占比类别文本重叠问题

针对你遇到的“Shared room”和“Hotel room”文本重叠问题,核心原因是这两个类别占比过小,仅靠explode参数不足以拉开文本距离,你可以尝试以下几种解决方案:

方案1:增大小占比类别的偏移量+调整百分比文本距离

修改explode参数给小占比类别设置更大的偏移,同时通过pctdistance让百分比文本离饼图中心更远,避免重叠:

fig, ax = plt.subplots(figsize=(12, 8), subplot_kw=dict(aspect="equal"))
labels = available_rooms.room_type.tolist()
sizes = available_rooms['percent'].tolist()

# 给小占比类别设置更大的偏移值(根据实际类别顺序调整索引)
explode = (0.1, 0, 0.3, 0.3)

wedges, texts, autotexts = ax.pie(
    sizes, 
    autopct='%1.1f%%',
    explode=explode,
    textprops=dict(color="w"),
    pctdistance=0.8  # 调整百分比文本与饼图中心的距离,默认是0.6
)

ax.legend(wedges, labels,
          title="RoomTypes",
          loc="center left",
          bbox_to_anchor=(1, 0, 0.5, 1))

plt.setp(autotexts, size=8, weight="bold")
ax.set_title("Type of rooms available in the Listing")
plt.tight_layout()  # 优化布局,避免图例或标题被截断
plt.show()

方案2:手动调整重叠文本位置

如果方案1效果仍不理想,可以手动定位重叠的百分比文本:

# 承接方案1的代码,在plt.setp之后添加
# 根据实际文本索引调整位置坐标
autotexts[2].set_position((1.2, 0.2))
autotexts[3].set_position((1.2, -0.2))

方案3:合并极小占比类别

若这两个类别占比极低,可将其合并为“Other”类别,避免视觉混乱:

# 预处理数据,合并占比低于阈值的类别
threshold = 1  # 设置占比阈值,低于该值的类别合并
small_percent = sizes[2] + sizes[3]
labels = labels[:2] + ["Other"]
sizes = sizes[:2] + [small_percent]
explode = (0.1, 0, 0.1)

# 后续饼图绘制代码与原代码一致

饼图重叠问题示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:06:29