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?
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
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.