Python(numpy) - 关联两个分箱图

时间:2017-05-25 18:45:04

标签: python numpy pearson-correlation

我的问题是如何关联我的两个分箱图并输出Pearson相关系数?

我不确定如何正确提取np.corrcoef函数所需的分箱数组。这是我的剧本:

import numpy as np 
import matplotlib.pyplot as plt

A = np.genfromtxt('data1.txt') 
x1 = A[:,1] 
y1 = A[:,2]

B=np.genfromtxt('data2.txt') 
x2 = B[:,1] 
y2 = B[:,2]

fig = plt.figure() 
plt.subplots_adjust(hspace=0.5) 
plt.subplot(121) 
AA = plt.hexbin(x1,y1,cmap='jet',gridsize=500,vmin=0,vmax=450,mincnt=1) 
plt.axis([-180,180,-180,180]) 
cb = plt.colorbar() 
plt.title('Data1')

plt.subplot(122) 
BB = plt.hexbin(x2,y2,cmap='jet',gridsize=500,vmin=0,vmax=450,mincnt=1) 
plt.axis([-180,180,-180,180]) 
cb = plt.colorbar() 
plt.title('Data 2')

array1 = np.ndarray.flatten(AA)  
array2 = np.ndarray.flatten(BB)

print np.corrcoef(array1,array2)

plt.show()

1 个答案:

答案 0 :(得分:1)

答案可以在documentation

中找到
  

返回:object

     

PolyCollection个实例;在get_array()上使用PolyCollection来获取每个六边形的计数。

以下是您的代码修订版:

A = np.genfromtxt('data1.txt') 
x1 = A[:,1] 
y1 = A[:,2]

B = np.genfromtxt('data2.txt') 
x2 = B[:,1] 
y2 = B[:,2]

# make figure and axes
fig, (ax1, ax2) = plt.subplots(1, 2)

# define common keyword arguments
hex_params = dict(cmap='jet', gridsize=500, vmin=0, vmax=450, mincnt=1)

# plot and set titles   
hex1 = ax1.hexbin(x1, y1, **hex_params) 
hex2 = ax2.hexbin(x2, y2, **hex_params) 
ax1.set_title('Data 1')
ax2.set_title('Data 2')

# set axes lims
[ax.set_xlim(-180, 180) for ax in (ax1, ax2)]
[ax.set_ylim(-180, 180) for ax in (ax1, ax2)]

# add single colorbar
fig.subplots_adjust(right=0.8, hspace=0.5)
cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])
fig.colorbar(hex2, cax=cbar_ax)

# get binned data and corr coeff
binned1 = hex1.get_array()
binned2 = hex2.get_array()    
print np.corrcoef(binned1, binned2)

plt.show()

但有两条评论:你确定要了皮尔逊相关系数吗?你究竟想要展示什么?如果要显示分布相同/不同,您可能需要使用Kolmogorov-Smirnov测试。

也不要将jet用作色彩图。 Jet is bad