繁体   English   中英

如何绘制来自3个不同列表(x,y和z)的3d直方图,其中z是所有重复的x,y坐标的平均值

[英]How to plot a 3d histogram from 3 different lists (x, y and z), where z is the mean of all repeated x,y coordinates

我想用matplotlib从以下三个列表中绘制3D直方图:

x = [random.randint(0, 12) for i in range(101)]  
y = [random.randint(0, 12) for i in range(101)]  
z = [random.random() for i in range(101)]

关键是x和y轴的范围必须在0到12之间,并且每个(x,y)箱都必须表示满足每个(x,y)准则的所有z值的平均值。 例如,让我们想象一下

x[0] = 5  
y[0] = 3  
z[0] = 0.8

可能会发生以下情况:

x[25] = 5  
y[25] = 3  
z[25] = 0.6

因此,直方图必须在坐标(x,y)=(5,3)上放置一个0.7高度的bin(x = 5 AND y = 3的所有实例的平均值)。

有人对如何以Python的方式有想法吗?

最好,非常感谢!
毛。

看一下这个:

import numpy as np
n=101

x = [np.random.randint(0, 12) for i in range(n)]  
y = [np.random.randint(0, 12) for i in range(n)]  
z = [np.random.random() for i in range(n)]

#coord=[(x[i],y[i]) for i in range(n)]

m=np.asarray([x,y]).transpose()

d=dict()
for i in range(n):
    coord=tuple(m[i])
    d[coord]=d[coord]+[z[i]] if coord in d else [z[i]]    

#for e in d:
#    print e,np.asarray(d[e]).mean()

m2=[]
for e in d:
    m2.append([list(e)[0],list(e)[1],np.asarray(d[e]).mean()])

m2=np.asarray(m2).transpose()

首先,它通过转置x和y数组将坐标保存在m中。

然后,它创建一个字典来存储每个唯一坐标的z值列表。

最后,它在m2中存储每个坐标的平均值,其中'x'= m2 [0],'y'= m2 [1]和'z-mean'= m2 [2]

我认为应该有更好的解决方案,希望对您有所帮助。

暂无
暂无

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

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