2012-11-29 10 views
14

mam 2D ​​tablicy numpy, który jest stworzony tak:Działka 2-wymiarowa tablica NumPy stosując specyficzne kolumny

data = np.empty((number_of_elements, 7)) 

Każdy wiersz z 7 (lub cokolwiek) pływa reprezentuje właściwości obiektu. Pierwsze dwa na przykład to x i y położenie obiektu, pozostałe to różne właściwości, które można nawet wykorzystać do zastosowania informacji o kolorach na wykresie.

chcę zrobić wykres punktowy z data, tak, że jeśli p = data[i], obiekt jest wykreślone jako punkt z p[:2] jako 2D pozycji iz powiedzieć p[2:4] jako informacji o kolorze (długość tego wektora należy określić kolor za punkt). Inne kolumny nie powinny mieć żadnego znaczenia na działce.

Jak powinienem to zrobić?

Odpowiedz

21

Konfiguracja podstawowa postać matplotlib jest proste:

import matplotlib.pyplot as plt 
import numpy as np 
fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1) 

odrywanie kolumn dla x, y i color może wyglądać mniej więcej tak:

N = 100 
data = np.random.random((N, 7)) 
x = data[:,0] 
y = data[:,1] 
points = data[:,2:4] 
# color is the length of each vector in `points` 
color = np.sqrt((points**2).sum(axis = 1))/np.sqrt(2.0) 
rgb = plt.get_cmap('jet')(color) 

Ostatnia linia pobiera jet colormap i odwzorowuje każdą z wartości zmiennoprzecinkowych (od 0 do 1) w macierzy color na 3-krotną wartość RGB. Istnieje lista map kolorów do wyboru: here. Istnieje również sposób definiowania niestandardowych map kolorów.

Making wykres punktowy jest prosta:

ax.scatter(x, y, color = rgb) 
plt.show() 
# plt.savefig('/tmp/out.png') # to save the figure to a file 

enter image description here

+1

Uzupełnij jak zwykle. Po prostu sugerowałbym, aby nie używać mapy kolorów, ale bardziej ciągłej, takiej jak lato czy zima, która daje wyraźniejsze odczucie przejścia, które może być zniekształcone przez spektrum kolorów dżetów. – EnricoGiampieri

6

Nie wiesz dokładnie, czego szukasz w działce, ale można pokroić tablice 2D tak:

>>> a 
array([[0, 1, 2], 
     [3, 4, 5], 
     [6, 7, 8]]) 
>>> a[:,1] 
array([1, 4, 7]) 
>>> a[:,1:3] 
array([[1, 2], 
     [4, 5], 
     [7, 8]]) 

Wtedy niektórzy matplot dbać o kreślenia. Jeśli znajdziesz to, czego szukasz, pod numerem Matplotlib Gallery mogę Ci pomóc.

+1

Wow, to było takie proste to żenujące .. Muszę zajrzeć do krojenia rzeczy. – tamacun