You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Matplotlib饼图不绘制列表零值问题(Python、Jupyter Notebook)

解决Matplotlib饼图不显示零值的问题

我来帮你搞定这个Matplotlib饼图的问题~你之前把0替换成NaN后触发cannot convert float NaN to integer错误,主要原因是你生成的列表混合了整数和浮点类型的NaN,Matplotlib在处理饼图的内部逻辑(比如索引映射、楔形位置计算)时,试图把NaN转换成整数,这就导致了报错。

下面给你两种实用的解决方案:

方案一:直接过滤零值(最稳妥的方式)

与其折腾NaN,不如直接把零值和对应的标签一起过滤掉,这样既不会有类型问题,还能让饼图只展示有意义的数据,逻辑也更直观:

import matplotlib.pyplot as plt

# 你的原始数据和标签
values = [3, 5, 0, 3, 5, 1, 4, 0, 9]
labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']

# 过滤掉零值以及对应的标签
filtered_values = [val for val in values if val != 0]
filtered_labels = [labels[idx] for idx, val in enumerate(values) if val != 0]

# 绘制饼图
plt.pie(filtered_values, labels=filtered_labels, autopct='%1.1f%%')
plt.title('Pie Chart Excluding Zero Values')
plt.show()

方案二:用Numpy数组处理NaN(修复你原方法的问题)

如果你坚持想用替换NaN的思路,换成Numpy数组就能解决类型混合的问题,Matplotlib对Numpy的NaN支持更友好:

import matplotlib.pyplot as plt
import numpy as np

values = [3, 5, 0, 3, 5, 1, 4, 0, 9]
labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']

# 转成Numpy数组,统一数据类型后替换0为NaN
values_np = np.array(values, dtype=np.float64)
values_np[values_np == 0] = np.nan

# 绘制饼图,Matplotlib会自动忽略NaN值
plt.pie(values_np, labels=labels, autopct='%1.1f%%')
plt.title('Pie Chart with NaN Replacing Zeros')
plt.show()

这里的关键是用Numpy数组统一了数据类型(都是float64),避免了原方法中int和float混合的情况,所以不会触发类型转换错误。

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

火山引擎 最新活动