2017-08-23 367 views
0

我可以創建不同長度的多個陣列的一個可愛的散點圖:Matplotlib散點圖

import matplotlib.pyplot as plt 

a = [1+2j, 2+3j, 3+4j] 
b = [1+3j, 2+4j, 3+5j] 
c = [1+4j, 2+5j, 3+6j, 4+7j] 

abc = [a, b, c] 
colours = ['blue', 'orange', 'green'] 
for aa,c in zip(abc, colours): 
    aaa = np.array(aa) 
    scat = plt.scatter(aaa.real, aaa.imag, c=c) 

Scatter plot

但是,如果我想與set_offsets動態去做,事情只要數組的長度不同去扭曲:

import matplotlib.pyplot as plt 

a = [1+2j, 2+3j, 3+4j] 
b = [1+3j, 2+4j, 3+5j] 
c = [1+4j, 2+5j, 3+6j, 4+7j] 

abc = [a, b, c] 
colours = ['blue', 'orange', 'green'] 

ax = plt.axes(xlim=(0.7, 4.3), ylim=(1.7, 7.3)) 
scat = ax.scatter([], [], c=colours) 
paa = [] 
for aa in abc: 
    paa.append(aa[0:SUBSET_IDX]) 
paaa = np.vstack([paa]).flatten('F') 
scat.set_offsets(np.c_[paaa.real, paaa.imag]) 

如果SUBSET_IDX是2,幸福的日子。但如果它是4,沒有什麼可以繪製的!然而paaa是你所期望的:

array([[(1+2j), (2+3j), (3+4j)], [(1+3j), (2+4j), (3+5j)], 
    [(1+4j), (2+5j), (3+6j), (4+7j)]], dtype=object) 

我怎麼set_offsets接受不同長度的陣列?

回答

0

並不理想,但我發現我可以通過填充任何短期陣列,虛擬數據解決此問題:

for aa in abc: 
    paa.append(aa[0:SUBSET_IDX] + [0+0j] * (SUBSET_IDX-len(aa))))