使用列表推导式在Matplotlib中绘制饼图时float不可迭代报错如何解决
问题定位
- 执行完前面的
for data in datas循环后,data变量已经指向datas列表的最后一个元素,data["perc"]是单浮点值、data["fuel"]是单字符串,二者都不是可迭代对象,所以你写的列表推导式尝试遍历这两个值的时候会抛出TypeError: 'float' object is not iterable错误 - 后续调用
plt.pie时你传入了字符串"y"而非数值变量y,即使列表生成正确也会触发报错 - 列表推导式的逻辑错误:你需要遍历整个
datas列表提取所有条目的perc和fuel字段,而非遍历单个条目对应的字段值
修正后代码
import requests import pprint import matplotlib.pyplot as plt import numpy as np filename = "https://api.carbonintensity.org.uk/regional/england" r = requests.get(filename) print("Status Code:", r.status_code) # 存储API返回结果 responce_dict = r.json() # 提取发电结构数据 datas = responce_dict["data"][0]["data"][0]["generationmix"] # 打印原始数据 pprint.pprint(datas) # 正确遍历整个datas列表提取字段 y = np.array([item["perc"] for item in datas]) mylabels = [item["fuel"] for item in datas] # 传入正确变量绘制饼图,autopct参数用于显示扇形占比 plt.pie(y, labels = mylabels, autopct='%1.1f%%') plt.show()
内容的提问来源于stack exchange,提问作者code
相关产品推荐
相关产品推荐

