繁体   English   中英

我在matplotlib(python)中有一个带有误差条的条形图,但我希望误差条位于该条的中间。 我该怎么做呢? 谢谢

[英]I have a bar chart with error bars in matplotlib (python), but i want the error bars in the middle of the bar. how do i do this? Thanks

#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()

注意, bar()也接受yerr=参数

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

这将自动将错误栏放置在每个栏的中心。 无需先绘制条形,然后使用errorbar()在顶部绘制错误条。

问题是,对于误差线和条形图,您使用相同的x数据(在您的情况下为cos)。 一种简单的解决方案是为误差线的x数据增加1/2线宽度,换句话说:

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

其中0.025是条形宽度的一半。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM