#Figure 1, right at the bottom of the code, needs the error bars.
import scipy as sp
import numpy as np
import pylab as pl
import matplotlib as mpl
import numpy.random as nr
import matplotlib.pyplot as plt
M = 91.0
G = 2.5
RS = 0.14
JS = -0.033
S = np.arange(20,140,0.1)
def sigs(com):
for i in com:
yield ((4.0*np.pi)/3.0)*((1/i**2) + (((i**2)*RS + JS*((i**2)-M**2))/(((i**2)-M**2)**2 + (M*G)**2)))
x = list(sigs(S))
RA = 0.0027
JA = 0.81
def siga(com):
for i in com:
yield np.pi*((i**2)*RA + JA*((i**2) - M**2))/((((i**2) - M**2)**2) + (M*G)**2)
a = list(siga(S))
N = []
for m in x:
N.append(1000000*8*m/3)
cos = np.arange(-0.95, 0.90, 0.05)
sin = np.arange(-0.90, 0.95, 0.05)
M = []
for (i, j) in zip(cos,sin):
M.append((1000000*j*(0.094 + 0.0313*j*j + 0.000679*j))-(1000000*i*(0.094 + 0.0313*i*i + 0.000679*i)))
s = np.random.poisson(M)
z = []
for t in s:
z.append(t**0.5)
plt.figure(4)
pl.bar(cos, s, width = 0.05)
pl.xlabel('cos${\Theta}$')
pl.ylabel('Number of muons produced within the cos${\Theta}$ interval')
yerr = z
plt.errorbar(cos, s, yerr=yerr, fmt = 'o')
pl.show()
答案 0 :(得分:4)
请注意bar()
also accepts a yerr=
argument:
pl.bar(cos, s, width=0.05, yerr=yerr)
这会自动将误差条放在每个条的中心。首先不需要绘制条形图,然后使用errorbar()
在顶部绘制误差条。
答案 1 :(得分:0)
问题是您使用相同的x数据(在您的情况下为cos)作为误差线和条形图。一个简单的解决方案是为误差条的x数据添加1/2 bar宽度,换句话说:
plt.errorbar(cos + 0.025 , s, yerr=yerr, fmt = 'o')
其中0.025是条宽的一半。