You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python直方图柱体对齐:如何实现柱体居中显示

解决直方图柱体居中的问题

看起来你在代码里混用了plt.hist()和错误的x.bar()调用,这是导致问题的主要原因。咱们一步步来修正,实现你想要的柱体居中效果:

问题分析

你的代码里有几个明显的小问题:

  • 变量x被定义为数组后,又试图调用x.bar(),这是不对的——bar是matplotlib.pyplot的方法,应该用plt.bar()才对
  • plt.hist()是用来生成统计直方图的(自动计算数据频率),而plt.bar()是手动绘制柱状图的,两者不需要同时用,选一种符合你需求的就行

方案1:用plt.bar()手动实现居中柱体

如果你的y数组是每个柱体的高度,x是对应的类别/数值,直接用plt.bar()并设置align='center'就能轻松实现居中:

import matplotlib.pyplot as plt
import numpy as np

# 替换成你实际的array(这里示例为和y长度匹配的数值)
array = np.arange(10, 120, 10)
y = [0,1,2,3,4,5,6,7,8,9,10]
barWidth = 20

# 绘制居中的柱状图
plt.bar(array, y, width=barWidth, align='center', facecolor='green', alpha=0.5)

# 可选:让x轴刻度和柱体中心对齐
plt.xticks(array)

plt.show()

方案2:用plt.hist()实现居中的统计直方图

如果你确实需要基于数据x生成统计直方图,想要让柱子居中,可以通过手动设置bins的位置来实现:

import matplotlib.pyplot as plt
import numpy as np

# 替换成你的实际数据x
x = np.random.randint(0, 11, size=100)
# 可以用数据的唯一值数量作为分箱数,或者自定义数值
num_bins = len(np.unique(x))

# 计算bins,让每个柱子的中心刚好对应目标数值
bins = np.arange(-0.5, num_bins + 0.5, 1)

# 绘制直方图,柱子会自动居中在对应数值上
n, bins, patches = plt.hist(x, bins=bins, facecolor='green', alpha=0.5)

# 设置x轴刻度为整数,和柱体中心对齐
plt.xticks(np.arange(0, 11))

plt.show()

关键说明

  • plt.bar()时,align='center'会让柱体以你传入的x值为中心,非常直观
  • plt.hist()时,核心是调整bins的左右边界,让每个柱子的中心刚好落在你想要的数值点上

你可以根据自己的实际需求(是手动控制柱高,还是统计数据频率)选择对应的方案~

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

火山引擎 最新活动