You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:37:39