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

Python绘制逐个垂直柱状图报错:str与float运算不支持

问题原因与解决办法

核心原因

你使用的Matplotlib版本过低(当前是适配Python3.6的旧版本),在该版本中plt.bar()的第一个参数(x轴位置)不支持直接传入字符串列表,内部会尝试对字符串执行数值运算(如报错中的减法操作),从而触发类型错误。

解决方法

有两种可行的修复方式:

  1. 升级Matplotlib版本:更新到支持直接传入字符串作为x轴标签的新版本(推荐,旧版本存在较多兼容性问题),执行命令:

    pip install --upgrade matplotlib
    

    升级后原有代码可直接正常运行,plt.bar()会自动处理字符串标签。

  2. 手动指定x轴位置与标签:若无法升级版本,修改代码先传入数值型x轴位置,再通过plt.xticks()设置字符串标签:

    for state in us_census_new.State:
      data = us_census_new[us_census_new['State'] == state]
      if data[['Hispanic_freq', 'White_freq']].isnull().values.any():
        print(f'Missing value in {state}')
      else:
        values = data[['Hispanic_freq', 'White_freq']].values.tolist()[0]
        # 用数值作为x轴位置,再设置对应标签
        x_pos = [0, 1]
        labels = ['Hispanic_freq', 'White_freq']
        plt.bar(x_pos, values)
        plt.xticks(x_pos, labels)
        plt.title(f'{state} Demographic Frequencies') # 可选:添加标题区分不同州
        plt.show()
        plt.clf()
    

额外优化建议

可以改用groupby优化循环逻辑,避免每次循环重复过滤数据,提升效率:

for state, data in us_census_new.groupby('State'):
    values = data[['Hispanic_freq', 'White_freq']].iloc[0].tolist()
    x_pos = [0, 1]
    labels = ['Hispanic_freq', 'White_freq']
    plt.bar(x_pos, values)
    plt.xticks(x_pos, labels)
    plt.title(state)
    plt.show()
    plt.clf()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:37:49