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

Matplotlib中如何旋转条形图?及orientation参数使用报错原因解析

解决Matplotlib水平条形图的参数报错问题

嘿,我来帮你搞定这个报错的问题!

错误原因&和旋转操作的关系

这个报错完全和你旋转条形图的操作有关,核心问题是你搞混了plt.bar()在不同方向下的参数对应关系:

  • 默认的垂直条形图(orientation='vertical',也是默认值)里,我们用x指定条形的横轴位置,height指定条形的高度;
  • 但当你设置orientation='horizontal'时,plt.bar()的参数逻辑会切换:此时需要用y指定条形的纵轴位置,width指定条形的长度(代替原来的height),而不是继续用x和height。

你写的代码里,传入了x=[1,2,3]和height=[1,2,3]并指定水平方向,Matplotlib会把你给的x参数当成y参数的值(因为水平模式下需要的是y位置),但height还是被当作垂直方向的高度参数,这就导致了参数类型不匹配的报错——它认为你传入的y(原x的列表)和height(整数列表)数据类型不兼容。

为什么指定y参数还是报错?

如果你只是加了y参数但没替换height为width,比如写成:

plt.bar(y=[1,2,3], height=[1,2,3], orientation=u'horizontal')

这依然会报错,因为水平条形图里不需要height参数,你需要把height换成width来指定条形的长度。

正确的写法

有两种推荐的方式来实现水平条形图:

方式1:用plt.bar()并正确传参

import matplotlib.pyplot as plt
plt.bar(y=[1,2,3], width=[1,2,3], orientation='horizontal')
plt.show()

方式2:用专门的水平条形图函数plt.barh()(更直观)

barh是horizontal bar的缩写,本身就是为水平条形图设计的,不需要指定orientation参数:

import matplotlib.pyplot as plt
plt.barh(y=[1,2,3], width=[1,2,3])
plt.show()

这样运行就不会有报错啦,你可以根据自己的习惯选择其中一种写法~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:27:40