2011-10-21 8 views
11

Sto cercando un modo per creare grafici a quattro dimensioni (superficie più una scala di colori) usando Python e matplotlib. Sono in grado di generare la superficie utilizzando le prime tre variabili, ma non ho successo aggiungendo la scala dei colori per la quarta variabile. Ecco un piccolo sottoinsieme dei miei dati qui sotto. Qualsiasi aiuto sarebbe molto apprezzato. GrazieCome creare una trama 4d usando Python con matplotlib

sottoinsieme dei dati

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

Siamo spiacenti, i dati non formattare correttamente. Dovrebbe essere visualizzato: – 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

risposta

3

Per creare la trama che si desidera, abbiamo bisogno di usare matplotlib di plot_surface per tracciare Z vs (X,Y) superficie, e quindi utilizzare la parola chiave argomento facecolors a passare in un nuovo colore per ogni patch .

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