web-dev-qa-db-fra.com

Tracer un tableau NumPy bidimensionnel à l'aide de colonnes spécifiques

J'ai un tableau numpy 2D créé comme ceci:

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

Chaque ligne avec 7 (ou autre) flottants représente les propriétés d'un objet. Les deux premiers, par exemple, sont la position x et y de l'objet, les autres sont diverses propriétés qui pourraient même être utilisées pour appliquer des informations de couleur au tracé.

Je veux faire un nuage de points à partir de data, de sorte que si p = data[i], un objet est tracé comme un point avec p[:2] comme sa position 2D et disons p[2:4] comme information de couleur (la longueur de ce vecteur devrait déterminer une couleur pour le point). Les autres colonnes ne devraient pas avoir d'importance pour l'intrigue.

Comment dois-je procéder?

16
tamacun

La configuration d'une figure de base matplotlib est simple:

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

Le retrait des colonnes pour x, y et color pourrait ressembler à ceci:

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)

La dernière ligne récupère la palette de couleurs jet et mappe chacune des valeurs flottantes (entre 0 et 1) du tableau color sur une valeur RVB à 3 tuples. Il existe une liste de cartes de couleurs parmi lesquelles choisir ici . Il existe également un moyen de définir des cartes de couleurs personnalisées.

La création d'un nuage de points est désormais simple:

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

enter image description here

23
unutbu

Vous ne savez pas exactement ce que vous recherchez dans l'intrigue, mais vous pouvez découper des tableaux 2D comme ceci:

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

Ensuite, un matplot pour prendre soin du tracé. Si vous trouvez ce que vous cherchez à la Matplotlib Gallery je peux vous aider davantage.

6
Daniel