2015-02-08 40 views
2
#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

問題是,你使用相同的X數據(在你的情況下爲cos)的錯誤酒吧和酒吧情節。一個簡單的解決方案是爲錯誤條的x數據添加1/2條寬度,換句話說:

plt.errorbar(cos + 0.025 , s, yerr=yerr, fmt = 'o') 

其中0.025是條寬的一半。

3

注意bar() also accepts a yerr= argument

pl.bar(cos, s, width=0.05, yerr=yerr) 

這會自動將errorbars在每個酒吧的中心。沒有必要先繪製條形圖,然後使用errorbar()在上面繪製錯誤條。

相關問題