Color de matplotlib en el trazado 3D de un conjunto de datos x, y, z sin usar contorno

Por mi vida, no puedo averiguar cómo obtener los mismos resultados que esto .

El enlace genera la ttwig 3d de color sin utilizar contorno. Si utilizo la misma técnica pero con mi propio conjunto de datos x, y, z obtengo solo un color.

La diferencia debe estar en la forma en que estoy generando los datos z para el gráfico.

De todos modos, usando esto:

from mpl_toolkits.mplot3d import Axes3D from matplotlib.mlab import griddata from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter import matplotlib.pyplot as plt import numpy as np import sys def xyz_ret(file): f = open(file, 'r') xyz = [] for i in f: ret = i.replace('\n','') xyz.append(map(float,(ret.split('\t')))) xyz = np.array(xyz) return xyz[:,0],xyz[:,1],xyz[:,2] x,y,z = xyz_ret('300.txt') fig = plt.figure() ax = fig.add_subplot(111, projection='3d') xi = np.linspace(min(x), max(x)) yi = np.linspace(min(y), max(y)) X, Y = np.meshgrid(xi, yi) Z = griddata(x, y, z, xi, yi) surf = ax.plot_surface(X, Y, Z, rstride=6, cstride=6, cmap=cm.jet, linewidth=0) ax.set_zlim3d(min(z), max(z)) ax.w_zaxis.set_major_locator(LinearLocator(10)) ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f')) fig.colorbar(surf, shrink=0.5, aspect=5) plt.show() 

Conjunto de datos:

 -2187.99902 9380.009151 0.0209 -2187.00111 2474.994061 0.022 -10755.98931 6119.598968 0.0296 -5781.347693 609.427388 0.0301 -8761.562524 1942.391853 0.0285 -5695.576244 1894.624701 0.0251 -3801.215106 1096.153308 0.0257 -1616.821487 2452.940102 0.0182 -5790.547537 2975.622971 0.022 -8095.18467 4074.330871 0.0208 -9997.367785 2771.330212 0.0264 -10547.5635 4397.127096 0.0251 -5781.706776 3984.545588 0.0191 -3346.855289 4347.670408 0.0172 -918.639762 4518.515925 0.0142 -892.428381 5850.710005 0.0143 -5844.499993 6516.904257 0.0204 -10877.96951 6015.755723 0.0265 -10813.37291 7704.306099 0.0302 -7991.878303 7733.626264 0.0223 -5861.073574 8725.943697 0.0217 -3188.107715 6997.19893 0.0206 -897.427629 7474.426336 0.0188 -1388.841321 8786.642046 0.0194 -3370.72325 8825.154803 0.0225 -8561.226722 8851.111988 0.0285 -10275.58972 8849.798032 0.0341 -5853.645621 10113.77051 0.0255 -8101.002878 10754.8429 0.0332 -5765.080546 11378.95524 0.0299 -3081.969839 10549.46676 0.0242 

Solo se muestra un color. Observe también que la barra de colores no tiene garrapatas.

¿Puedes explicar cuál es mi problema?

Creo que hay un problema con el relleno de la superficie “discontinua” (griddata). texto alternativo

Código:

 from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm import matplotlib.pyplot as plt from matplotlib.mlab import griddata import numpy as np fig = plt.figure() ax = fig.gca(projection='3d') data = np.genfromtxt('300.txt') x = data[:,0] y = data[:,1] z = data[:,2] xi = np.linspace(min(x), max(x)) yi = np.linspace(min(y), max(y)) X, Y = np.meshgrid(xi, yi) Z = griddata(x, y, z, xi, yi) surf = ax.plot_surface(X, Y, Z, rstride=5, cstride=5, cmap=cm.jet, linewidth=1, antialiased=True) ax.set_zlim3d(np.min(Z), np.max(Z)) fig.colorbar(surf) plt.show() 

Tenga en cuenta que si considera la superficie sobre un área rectangular (xi x yi) , este código funciona correctamente. En otras palabras, si se “cortan” los bordes irregulares.

 xi = np.linspace(-4000, -9000) yi = np.linspace(4000, 9000) 

texto alternativo

La forma más fácil de leer datos de texto es a través de genfromtxt:

 data = np.genfromtxt('300.txt') x = data[:,0] y = data[:,1] z = data[:,2] 

no se requiere sys

Acabo de luchar con el problema similar.

Finalmente tuve que usar natgrid (al que se hace referencia aquí, pero el enlace no funciona) en lugar de griddata.

Para mí, el truco con el corte de la región de la ttwig no funcionó, siempre fue en un color.

Al instalar PyNGL, compruebe que tiene la última versión de numpy.

Buena suerte