2017-08-07 174 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

相關問題