Matplotlib报错:can't multiply sequence by non-int of type 'float' 求助
解决Matplotlib饼图报错:can't multiply sequence by non-int of type 'float'
嘿,这个问题我太熟了!你遇到的错误根源完全不在数据类型转换上,而是**plt.pie()的参数传递顺序搞错了**。
错误原因拆解
Matplotlib的plt.pie()函数参数是有严格顺序的:
- 第一个参数是必填的数值数据(也就是你这里的
df3.total_cases) - 第二个参数是
explode,用来设置饼块和中心的分离距离(默认是None)
而你直接把df3.index放在了第二个参数的位置,函数会把这个索引序列当成explode参数处理。后续autopct='%1.1f%%'在内部进行格式计算时,会尝试对这个序列做浮点数乘法,自然就抛出了“不能用浮点数乘序列”的错误。
修正后的代码
你只需要把df3.index通过**关键字参数labels=**明确传递给饼图,就能解决问题:
import pandas as pd import matplotlib.pyplot as plt # 计算各大洲总病例数(你的原有代码) df3 = pd.DataFrame(df.groupby(by="continent")['total_cases'].sum()) plt.figure(figsize=(15, 8)) plt.title('Total case for each continent') # 关键:用labels=指定索引为饼图标签,而不是靠位置传递 plt.pie(df3.total_cases, labels=df3.index, shadow=True, autopct='%1.1f%%', startangle=90) plt.show()
额外小贴士
以后调用Matplotlib的复杂函数时,尽量多用关键字参数来传递非必填项,不仅能避免参数顺序出错,代码可读性也会更高~
内容的提问来源于stack exchange,提问作者user10811679




