2017-08-23 1 views
0

ich eine schöne Streudiagramm von mehreren Arrays unterschiedlicher Länge erstellen:Matplotlib Streudiagramm von Teilmenge von unterschiedlicher Länge Arrays

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

Aber wenn ich will es mit set_offsets dynamisch zu tun, Dinge gehen verrückt, sobald die Arrays unterschiedlicher Länge sind:

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]) 

Wenn SUBSET_IDX 2, glückliche Tage. Aber wenn es 4 ist, wird nichts geplottet! Und doch ist paaa was man erwarten würde:

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

Wie erhalte ich set_offsets Arrays unterschiedlicher Längen zu akzeptieren?

Antwort

0

Nicht ideal, aber ich fand ich durch Klotzen keine kurzen Arrays mit Dummy-Daten dieses Problem umgehen:

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