2017-08-07 173 views
0

我有两个数据集array1array2,其形状与(365, 180, 140)完全相同。第一个阵列具有降水值,而第二个阵列具有大气中尘埃浓度的值。数组中的第一个元素表示当天,第二个和第三个元素表示经度和纬度。在相同形状的两个数据集之间绘制相关图

我想在散点图上显示这两个数据集之间的相关性。我希望在x轴上具有降水值,并且在y轴上具有粉尘浓度值。基本上,我想要获取array1中每个索引的值,将其指定为x坐标,并将其取为array2中对应索引的值,并将其指定为y值。有谁知道我能做到这一点?提前谢谢你。

编辑:我的意思是“每一个索引”是这样的:例如,我想以array1[1, 1, 1],指定为ax坐标,并取array2[1, 1, 1],并指定为ay坐标,并将结果点绘制成散点图情节。然后我想绘制[1, 2, 1],[1, 3, 1],[1, 4, 1]等等。

+0

欢迎StackOverflow上。请查看本指南以了解如何编写一个好问题:https://codeblog.jonskeet.uk/2012/11/24/stack-overflow-question-checklist/ – Graham

+0

首先,Python中的“数组”是[列表,元组或范围](https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range)。由于数据集全部由三个元素组成,且不会变异,所以[tuple](https://docs.python.org/3/library/stdtypes.html#tuples)非常合适。接下来,澄清你关于“每个索引”的问题,因为每个元素都从零开始索引。例如,'prec =(1,2,3)'然后'print(prec [0])产生'1'。目前还不清楚你想在笛卡尔坐标系上绘制哪个元组。 –

+0

@StevePiercy:我编辑了我的问题。感谢您的建议。 –

回答

0

这听起来像你想绘制array1中的每一个条目对阵array2中的相应条目。

在matplotlib中的分散功能,自动展平n维数组,所以这样的事情应该工作:

import matplotlib.pyplot as mp 
mp.scatter(array1, array2) 

您还可以更明确,自己扁平化阵列(该指标将被保留):

mp.scatter(array1.flatten(), array2.flatten()) 

并提供一个完整的工作示例,这里的一些代码,创建这些阵列,并绘制它们,假设降水将与一些噪音粉尘浓度呈负相关。注意:散布图在matplotlib中渲染非常慢,因此对于尺寸为365x180x140的尺寸,绘制可能需要一段时间。

import matplotlib.pyplot as mp 
import numpy 

# specify dimensions 
ndays=30 
nlat=20 
nlon=40 

# create a random array (say "precipitation") with the dimensions above 
array1 = numpy.random.random((ndays,nlat,nlon)) 

# create another array negatively correlated with precipitation 
array2 = -1*array1 
# and add some noise to array2 
array2 += numpy.random.normal(loc=0, scale=0.5, size=array2.shape) 

mp.scatter(array1.flatten(), array2.flatten()) 
mp.xlabel('array1') 
mp.ylabel('array2') 

下面是这个创建人物:

enter image description here

相关问题