2015-02-24 1 views
0

Je suis assez nouveau à Python Matplot. J'essaie de tracer un graphique en barres 3D dans lequel la hauteur de la barre est z et la position des barres sont x, y de mon tableau.comment puis-je définir et tracer un tableau 10 * 10 en python avec Matplotlib?

Ceci est un exemple de mes données, j'ai un 10 * 10 tableau:

data = np.array([[0.1729,0.8658,0.9283,0.9381,0.9535,1.0000,1.0000,0.9999,0.9999,1.0000], 
[-0.0430,0.3109,0.2788,0.5846,0.5369,0.5717,0.6357,0.5619,0.5866,0.6587], 
[-0.2228,0.3427,0.1842,0.2106,0.4398,0.3896,0.4687,0.5749,0.4684,0.5484], 
[0.0011,0.2899,0.1854,0.1040,0.3513,0.3863,0.3971,0.4485,0.2514,0.4946], 
[-0.0096,0.0630,0.1564,-0.0077,0.0825,0.1637,0.2627,0.4800,0.3931,0.3244], 
[0.0134,0.1198,0.3339,0.1243,-0.0864,0.4048,0.1996,0.3988,0.1970,0.5248], 
[-0.0153,0.2806,0.1926,0.1918,0.0860,0.1054,0.3202,0.3063,0.2644,0.3791], 
[-0.1118,0.3065,0.1396,0.0949,0.3459,0.1168,0.3730,0.0741,0.3518,0.2150], 
[0.1022,0.3144,-0.1165,0.0509,0.1462,0.3265,0.2087,0.2549,0.3914,0.2683], 
[-0.0083,-0.0228,0.0721,0.1086,0.2400,0.1899,0.0922,0.1006,0.2430,0.2768]]) 

J'utilise le code ci-dessous pour tracer la courbe de la barre 3d:

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax1 = Axes3D(fig) 

xpos = np.arange(data.shape[0]) 
ypos = np.arange(data.shape[1]) 
zpos = data 

xposM, yposM = np.meshgrid(xpos, ypos, copy=False) 

dx=0.5 
dy=0.5 
dz=zpos 

ax1.bar3d(xposM.ravel(), yposM.ravel(), dz, dx, dy, dz) 
plt.show() 

mais je suis obtenir cette erreur:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

Est-ce que n'importe quel corps sait quel est le problème de mon code?

+0

numpy ne fait pas de traçage. Vous voulez matplot; [ici] (http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#bar-plots) est un exemple de ce que vous cherchez. – Tom

+0

@Tom merci. J'ai vu cela et je ne pouvais pas comprendre comment cela s'applique à une matrice de haute dimension. Ne pas comprendre les éléments dans bar3d. Pouvez-vous m'aider avec mon exemple de matrice /.? – UserYmY

Répondre

3

Il y a deux problèmes avec votre code.

1: zpos ne doit pas être =data; C'est le principal blocage que vous avez. 2: Vous devriez (probablement) appeler bar3d comme ax1.bar3d(xposM.ravel(), yposM.ravel(), zpos, dx, dy, dz). En l'état, vous positionnez vos barres pour avoir leur base à l'endroit où elles devraient aller. C'est-à-dire qu'une barre de hauteur 3 va commencer à z = 3 et aller à z = 6, et qu'une barre de hauteur -2.1 va commencer à z = -2.1. Comme pour le premier numéro, xpos et ypos ont une forme (100,), tandis que les données ont une forme (10,10). Vous avez besoin d'eux pour avoir les mêmes dimensions, donc je recommanderais d'inclure zpos = np.zeros(len(data.ravel())). Cela signifie également que vous devrez définir dz = data.ravel().

+0

Merci Tom. Lorsque j'applique la correction que vous avez recommandée, cela prend beaucoup de temps et aucun résultat pour le moment. avez-vous deviner pourquoi? – UserYmY

+0

Je ne suis pas sûr. Avez-vous fait des substitutions à votre code autre que: LINE 10: 'zpos = data' devient' zpos = np.zeros (len (data.ravel())) '; LIGNE 16: 'dz = zpos' devient' dz = data.ravel() '; LIGNE 18: 'ax1.bar3d (xposM.ravel(), yposM.ravel(), dz, dx, dy, dz)' devient 'ax1.bar3d (xposM.ravel(), yposM.ravel(), zpos, dx , dy, dz) '? – Tom