Para la vida de mí no puedo averiguar cómo obtener los mismos resultados que este.

El enlace que genera el color de gráfico 3d sin necesidad de utilizar el contorno. Si utilizo la misma técnica, pero con mi propio x,y,z conjunto de datos puedo obtener solamente un color.

La diferencia debe estar en la forma en que estoy generando la z de datos de la trama.

De todos modos, el uso de este:

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

Un solo color se muestra. También tenga en cuenta el color de la barra no tiene garrapatas.

Puede explicar cuál es mi problema?

Yo diría que usted no está utilizando Axes3D.plot_surface. Importar Axes3D pero luego no utilizarlo.
Se usa en la forma ax = fig.add_subplot(111, de proyección=’3d’), Si puedo quitar el Axes3d la secuencia de comandos de error en esa línea.

OriginalEl autor hl3fx | 2010-12-06

3 Comentarios

  1. 17

    Creo que hay un problema con relleno «discontinua» de la superficie (griddata). matplotlib color en 3d trazar desde el x,y,z conjunto de datos sin necesidad de utilizar el contorno de

    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()

    Por favor, tenga en cuenta que si se considera la superficie por encima de un área rectangular (xi x yi), este código funciona correctamente. En otras palabras, si «cortado» de bordes irregulares.

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

    matplotlib color en 3d trazar desde el x,y,z conjunto de datos sin necesidad de utilizar el contorno de

    Muchas gracias por los comentarios. Todavía estoy tratando de averiguar. Me pregunto si hay otra forma de obtener el z de datos sin necesidad de utilizar griddata?
    Sería un síntoma de la anterior también la falta de marcas de graduación en la barra de color? Yo creo que estos dos problemas están relacionados directamente. en el código de ejemplo las garrapatas se muestran en representación de los diferentes colores a la altura z. Si imprime Z en el código de ejemplo de una matriz de listas se muestra lleno de números, en el código anterior si de impresión Z una lista de — se muestra. Alguna idea?
    hmm, gracias por encontrar que. Ahora la forma de arreglar el roto de la superficie? He encontrado a alguien con el mismo problema aquí: old.nabble.com/… . Lamentablemente no hubo respuesta a su pregunta.
    La superficie no está rota, pero los valores de Z no están especificadas para todos los puntos (xi, yi) i.imgur.com/P8CHH.png. No tengo idea de cómo llenar una superficie irregular.
    Enfermo tomar esto a la matplotlib lista de correo para ver si alguien puede tener una idea y la actualización más tarde. Gracias por toda su ayuda hasta el momento.

    OriginalEl autor kros

  2. 2

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

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

    sys no es necesario.

    ah, bueno gracias por el dato! 🙂
    Yo uso sys para salir de la secuencia de comandos de forma aleatoria, mientras que la codificación para probar cosas. sys.exit()

    OriginalEl autor kros

  3. 2

    Acabo luchado con el problema similar.

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

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

    Al instalar PyNGL comprobar que tienes la última versión de numpy.

    Buena suerte

    OriginalEl autor Valentin Rychkov

Dejar respuesta

Please enter your comment!
Please enter your name here