如何解决Matplotlib的Non-1D inputs to pie()警告?输入均为一维列表或百分比值
解决Matplotlib pie()的Non-1D输入警告
嘿,这个警告我之前踩过坑!虽然你说输入都是一维列表或百分比值,但大概率是你的values(或者subjects,不过更可能是values)其实是隐性的二维结构——比如嵌套列表(像[[15,25,60]]这种),或者形状为(1, N)的numpy数组,看起来像一维但实际是二维,Matplotlib新版本已经不再自动帮你压缩维度,所以触发了这个警告。
下面给你几个具体的解决步骤:
先确认输入维度
先搞清楚你的数据到底是不是真的一维:- 如果是普通列表,直接打印看看是不是嵌套的:
print(values),要是输出带两层方括号,那就是问题所在。 - 如果是numpy数组,打印形状:
print(np.array(values).shape),要是输出是(1, 3)这种,就是二维结构。
- 如果是普通列表,直接打印看看是不是嵌套的:
把输入转成严格的一维结构
根据你的数据类型选对应的方法:- 要是嵌套列表,直接取第一个元素:
values = values[0] - 要是numpy数组,用
squeeze()压缩多余维度:values = values.squeeze(),或者用flatten()强制转一维:values = values.flatten() - 要是用pandas取的数据(比如单行Series),可以转成一维列表:
values = values.tolist()
举个完整的修正代码例子:
import matplotlib.pyplot as plt import numpy as np # 假设你的values是不小心生成的二维结构 values = np.array([[20, 30, 50]]) # 形状是(1,3)的二维数组 subjects = ['Python', 'Java', 'C++'] cols = ['#ff6b6b', '#4ecdc4', '#45b7d1'] # 转成一维 values = values.squeeze() plt.pie(values, labels=subjects, colors=cols, autopct='%1.1f%%') plt.show()- 要是嵌套列表,直接取第一个元素:
额外提醒
这个警告是Matplotlib在3.7+版本里新增的,目的是避免你不小心传入二维数据(比如本来想画多个饼图但搞错了参数),所以手动把输入转成一维不仅能消掉警告,还能让代码逻辑更清晰。
内容的提问来源于stack exchange,提问作者Lyra Orwell
相关产品推荐
相关产品推荐

