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

Matplotlib barh报错:不支持unicode与float的减法运算求解

解决matplotlib barh设置yticklabels时的TypeError问题

嘿,这个坑我之前踩过!其实问题根本不是列表和数组的差异,而是你对barh()函数的参数用法理解错啦~

问题根源

barh()的第一个参数需要的是y轴上的数值位置(比如0、1、2这样的整数),但你直接传了unicode字符串列表a。matplotlib在计算条形的布局、间距时会做一些数值运算(比如减去浮点数来调整对齐),当它尝试对字符串做减法时,就会抛出那个TypeError: unsupported operand type(s) for -: 'unicode' and 'float'错误。

修正步骤

你需要先给每个条形分配一个数值型的y轴位置,再通过yticks()把这些位置映射成你的标签:

  • 用np.arange(len(a))生成和标签数量对应的数值序列(比如[0,1,2])
  • 把这个数值序列传给barh()的第一个参数
  • 调用yticks(),把数值位置和你的标签列表对应起来

修正后的完整代码

from matplotlib.pyplot import figure, xlabel, barh, yticks
import numpy as np

a = [u'name1', u'name2', u'name3']
b = np.array([6.35, 6.414, 6.400])

figure('bar', figsize=(11,5))
# 生成数值型y轴位置
y_positions = np.arange(len(a))
# 用数值位置调用barh
barh(y_positions, b, align='center', alpha=0.5)
# 映射数值位置到自定义标签
yticks(y_positions, a)
xlabel('yield (%)')

这样运行就不会报错啦,而且y轴会正确显示你设置的标签。

内容的提问来源于stack exchange,提问作者Noob Programmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:22:39