这是我的代码,我想使用直方图数据来绘制散点,其中y轴是直方图中心的中心,是否有任何直接命令或方法来执行此操作?
from pylab import*
import scipy.stats
from scipy.stats import norm
import numpy
r= numpy.random.uniform(0.0 ,1.0, 4000)
x=norm.rvs(5., 0.5,size=4000)
p=norm.rvs(2000. , 100. ,size=4000)
tau=.894*(10**-10)
m=497.7
c=3.0*(10**10)
E=(p*p + m*m)**.5
beta = p/E
gamma = (1-beta*beta)**(-0.5)
t= - tau * log (r)
T= t*gamma
g=beta*T*c
w= x+g
l=ma.masked_where(w<10.0,w)
l1=ma.masked_where(l>40.,l)
t1=ma.masked_where(w>40.,t)
t2=ma.masked_where(w<10.,t1)
A=hist(t2.compressed()*10**10)
pos=A[1][:-1]+(A[1][1]-A[1][0])/2.0
scatter(pos,A[0])
#########want to use center of counts in scatter as y axis , (A[0]=counts )
#x=t2.compressed()*10**10)
####y=????
#scatter(x,y)
这会生成
答案 0 :(得分:1)
在第
行from pylab import *
您已导入matplotlib
的{{3}}功能。这两者都计算了直方图并绘制了它。从我收集的评论中你基本上想要从你的情节中删除直方图?如果是这样,那么只需替换
A=hist(t2.compressed()*10**10)
带
A = numpy.histogram(t2.compressed()*10**10)
这是你只计算直方图而不是绘制直方图(A
与hist
完全相同的回报也调用numpy.histogram
。
修改强>
更一般地说,您可以使用
等功能自动执行此操作import matplotlib.pyplot as plt
import numpy as np
def BinnedScatterPlot(x, **args):
hist, bin_edges = np.histogram(x, **args)
bin_centers = .5*(bin_edges[:-1] + bin_edges[1:])
plt.scatter(bin_centers, hist)
plt.show()
x = np.random.normal(0, 1, size=1000)
BinnedScatterPlot(x, bins=20)