Python使用matplotlib基于给定百分比绘制双切片饼图的问题
核心错误原因
- 你定义的
pct_tested是字符串类型,自带%符号,无法直接作为数值参数传入绘图函数,也不能直接参与数值计算。 - 仅传入
[number_of_tested]时,matplotlib的饼图会将传入列表的数值总和作为100%,单个数值自然会显示为占比100%的单切片。
最优解决方法
建议优先保留原始数值做计算和绘图,格式化字符串仅用于打印输出,参考代码:
# 先计算纯数值的已测试占比,用于后续计算和绘图 tested_ratio = number_of_tested / len(df.index) # 需要打印美观的百分比结果时,再转成格式化字符串 pct_tested = "{:.2%}".format(tested_ratio) # 绘图时传入两个数值:已测试占比、未测试占比 plt.pie( [tested_ratio, 1 - tested_ratio], colors=colors, autopct='%.2f%%', # 该参数会自动将比例转换为带%的显示格式 labels=['已测试', '未测试'] # 可选:添加标签区分两个切片 )
特殊场景适配(仅能拿到格式化后的pct_tested字符串)
如果你的场景里没有原始数值,只能拿到已格式化的pct_tested字符串,可以先将字符串转换为纯数值再使用,参考代码:
# 去除字符串末尾的%,转成浮点数后除以100,得到纯数值占比 tested_ratio = float(pct_tested.strip('%')) / 100 plt.pie( [tested_ratio, 1 - tested_ratio], colors=colors, autopct='%.2f%%' )
内容的提问来源于stack exchange,提问作者Boston Co
相关产品推荐
相关产品推荐

