2011-10-21 48 views
11

Estoy buscando una forma de crear tramas cuatridimensionales (superficie más una escala de color) usando Python y matplotlib. Puedo generar la superficie usando las primeras tres variables, pero no estoy teniendo éxito agregando la escala de colores para la cuarta variable. Aquí hay un pequeño subconjunto de mis datos a continuación. Cualquier ayuda sería muy apreciada. GraciasCómo hacer una trama 4d usando Python con matplotlib

Data Subset

var1 var2 var3 var4 
10.39 73.32 2.02 28.26 
11.13 68.71 1.86 27.83 
12.71 74.27 1.89 28.26 
11.46 91.06 1.63 28.26 
11.72 85.38 1.51 28.26 
13.39 78.68 1.89 28.26 
13.02 68.02 2.01 28.26 
12.08 64.37 2.18 28.26 
11.58 60.71 2.28 28.26 
8.94 65.67 1.92 27.04 
11.61 59.57 2.32 27.52 
19.06 74.49 1.69 63.35 
17.52 73.62 1.73 63.51 
19.52 71.52 1.79 63.51 
18.76 67.55 1.86 63.51 
19.84 53.34 2.3  63.51 
20.19 59.82 1.97 63.51 
17.43 57.89 2.05 63.38 
17.9 59.95 1.89 63.51 
18.97 57.84 2  63.51 
19.22 57.74 2.05 63.51 
17.55 55.66 1.99 63.51 
19.22 101.31 6.76 94.29 
19.41 99.47 6.07 94.15 
18.99 94.01 7.32 94.08 
19.88 103.57 6.98 94.58 
19.08 95.38 5.66 94.14 
20.36 100.43 6.13 94.47 
20.13 98.78 7.37 94.47 
20.36 89.36 8.79 94.71 
20.96 84.48 8.33 94.01 
21.02 83.97 6.78 94.72 
19.6 95.64 6.56 94.57 
+0

En este momento, los datos no formatear correctamente. Se debería leer: – Chris

+0

var1 10,39 11,13 12,71 11,46 11,72 13,39 13,02 12,08 11,58 8,94 11,61 19,06 17,52 19,52 18,76 19,84 20,19 17,43 17,9 18,97 19,22 17,55 19.22 19.41 18.99 1 9,88 19,08 20,36 20,13 20,36 20,96 21,02 19,6 – Chris

+0

var2 73,32 68,71 74,27 91,06 85,38 78,68 68,02 64,37 60,71 65,67 59,57 74,49 73,62 71,52 67,55 53,34 59,82 57.89 59.95 57,84 57,74 55,66 101,31 99,47 94,01 103,57 95,38 100,43 98,78 89,36 84,48 83,97 95,64 – Chris

Respuesta

3

Para crear el gráfico que desee, tenemos que utilizar matplotlib de plot_surface para trazar Z vs (X,Y) superficie, y luego usar la palabra clave argumento facecolors para pasar en un nuevo color para cada parche .

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

# create some fake data 
x = y = np.arange(-4.0, 4.0, 0.02) 
# here are the x,y and respective z values 
X, Y = np.meshgrid(x, y) 
Z = np.sinc(np.sqrt(X*X+Y*Y)) 
# this is the value to use for the color 
V = np.sin(Y) 

# create the figure, add a 3d axis, set the viewing angle 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.view_init(45,60) 

# here we create the surface plot, but pass V through a colormap 
# to create a different color for each patch 
ax.plot_surface(X, Y, Z, facecolors=cm.Oranges(V)) 

enter image description here

Cuestiones relacionadas