如何设置matplotlib饼图部分区块为透明以高亮指定板块
实现方案
你只需要对ax1.pie()返回的扇形块对象(patches)的透明度属性做调整即可,Chemicals是你标签列表的第一个元素,对应patches列表的索引0,其余扇形块设置低透明度就能实现高亮效果。
修改后完整代码
import matplotlib.pyplot as plt # 饼图数据,切片默认逆时针排序绘制 labels = 'Chemicals', 'Oil & gas', 'Textiles& Mining' , 'Food & Breverages', 'Others' colors = ['#01579B','#2E86C1','#3498DB','#2874A6','#1B4F72'] sizes = [31, 24, 7, 5,33 ] explode = (0, 0, 0, 0, 0) fig1, ax1 = plt.subplots() patches, texts, autotexts = ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', startangle=90, colors=colors, textprops={'fontsize': 13}) ax1.axis('equal') # 等宽高比例保证饼图是圆形 # 高亮Chemicals板块,其余板块设置透明 highlight_index = labels.index("Chemicals") # 自动获取目标板块索引,避免手动数错 for i, patch in enumerate(patches): if i != highlight_index: patch.set_alpha(0.2) # 透明度可自定义,0为完全透明,1为完全不透明 # 如果需要其余板块的标签和百分比也同步变浅,取消下面两行注释 # texts[i].set_alpha(0.5) # autotexts[i].set_alpha(0.5) # 设置百分比文本样式 [autotext.set_color('white') for autotext in autotexts] [autotext.set_weight('bold') for autotext in autotexts] plt.savefig('filename1.png', dpi=300) plt.show()
关键修改说明
- 用
labels.index("Chemicals")自动获取目标板块的索引,不用手动数位置,避免标签顺序调整后代码失效 - 遍历所有扇形块,非目标板块设置
alpha参数降低透明度,数值可以根据需求调整 - 可选同步调整非目标板块的标签、百分比文本的透明度,视觉效果更统一
内容的提问来源于stack exchange,提问作者Loknath Basak
相关产品推荐
相关产品推荐

