在散点图中使用直方图计数

时间:2014-05-08 09:12:43

标签: python numpy matplotlib histogram

这是我的代码,我想使用直方图数据来绘制散点,其中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)

这会生成

enter image description here

1 个答案:

答案 0 :(得分:1)

在第

from pylab import *

您已导入matplotlib的{​​{3}}功能。这两者都计算了直方图并绘制了它。从我收集的评论中你基本上想要从你的情节中删除直方图?如果是这样,那么只需替换

A=hist(t2.compressed()*10**10)

A = numpy.histogram(t2.compressed()*10**10)

这是你只计算直方图而不是绘制直方图(Ahist完全相同的回报也调用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)