Python直方图位于精确解的右侧

Python直方图位于精确解的右侧,python,matplotlib,histogram,Python,Matplotlib,Histogram,我正在从事热物理的一个项目,为此我需要比较直方图和平滑曲线。我的问题是直方图被放置在曲线的右侧(曲线通过条形图的左上角是一致的): 我想让曲线穿过栏杆顶部的中间,就像它应该做的那样。这看起来可能是件小事,但它真的让我恼火。我希望有人能帮助我 程序如下所示: import numpy as np import matplotlib.pyplot as plt #--Constants-- M = 20 # Jmax N = 1000 # Number of J values T

我正在从事热物理的一个项目,为此我需要比较直方图和平滑曲线。我的问题是直方图被放置在曲线的右侧(曲线通过条形图的左上角是一致的):

我想让曲线穿过栏杆顶部的中间,就像它应该做的那样。这看起来可能是件小事,但它真的让我恼火。我希望有人能帮助我

程序如下所示:

import numpy as np
import matplotlib.pyplot as plt

#--Constants--
M = 20      # Jmax
N = 1000    # Number of J values
T = 50      # Actually T/theta_r

J1 = np.linspace(0,M,N)
J2 = np.linspace(0,M,M+1)

#--Calculate z--
def z(J):
    return(2*J+1)*np.exp(-J*(J+1)/T)

#--Plot--
width = .9                           #Width of columns
plt.bar(J2, z(J2), width=width)      #Plotting histogram
#plt.xticks(ind + width / 2, ind)     #Replacing the indexes under the columns
plt.plot(J1,z(J1),'-r', linewidth=2)
SZ={'size':'16'}
plt.title('Different terms $z(j)$ plotted as function of $j$',**SZ)
plt.xlabel('$j$',**SZ)
plt.ylabel('$z(j)$',**SZ)
plt.show()
的第一个参数指定每个条的左侧边的位置。要使每个条的中心与
z(J2)
的绘图对齐,需要将边的位置偏移减去条宽的一半:

plt.bar(J2 - 0.5 * width, z(J2), width=width)

我猜这个“问题”是与酒吧的摆放方式有关的!增加粒度并绘制更多条,您将看到整个图片发生了变化,例如,尝试
width=.7
?进一步说明:用于绘制单个条形图的数据分布不均匀;根据该代码中的数据的“内部”峰值,9</代码>点的范围,你所绘制的曲线在杆的中间不是完美的。或者,你可以使用关键字选项<代码> alig=“中心”< /代码>,它将解释<代码> j2 < /代码>作为条形码中心的坐标而不是左边缘。