Python MatPlotlib -> Parcela de barra 3D -> Posición de etiqueta de ajuste de garrapatas, barras transparentes

StackOverflow https://stackoverflow.com/questions/9433240

Pregunta

Estoy tratando de crear un histograma de la barra 3D en Python usando Bar3D () en MatPlotlib.

Tengo al punto en que puedo mostrar mi histograma en la pantalla después de pasarlo algunos datos, pero estoy atascado en lo siguiente:

  1. Visualización de etiquetas de ejes correctamente (actualmente se pierde las etiquetas final (o inicial) de garrapatas)
  2. Haciendo las garrapatas en cada eje (por ejemplo, que para 'Mon') apunte a su barra azul correspondiente, o coloque la etiqueta de garrapatas entre las principales marcas de garrapatas.
  3. haciendo las barras semitransparentes.

    Imagen de la trama cargada aquí

    He intentado pasar varios argumentos diferentes a la instancia 'AX', pero no tiene nada que trabajar a pesar de que y sospeche que he entendido mal con qué proporcionarlo. Estaré muy agradecido por cualquier ayuda en esto.

    Aquí hay una muestra del código en el que estoy trabajando:

    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    import numpy as np
    
    #from IPython.Shell import IPShellEmbed
    #sh = IPShellEmbed()
    
    data = np.array([
    [0,1,0,2,0],
    [0,3,0,2,0],
    [6,1,1,7,0],
    [0,5,0,2,9],
    [0,1,0,4,0],
    [9,1,3,4,2],
    [0,0,2,1,3],
    ])
    
    column_names = ['a','b','c','d','e']
    row_names = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']
    
    fig = plt.figure()
    ax = Axes3D(fig)
    
    lx= len(data[0])            # Work out matrix dimensions
    ly= len(data[:,0])
    xpos = np.arange(0,lx,1)    # Set up a mesh of positions
    ypos = np.arange(0,ly,1)
    xpos, ypos = np.meshgrid(xpos+0.25, ypos+0.25)
    
    xpos = xpos.flatten()   # Convert positions to 1D array
    ypos = ypos.flatten()
    zpos = np.zeros(lx*ly)
    
    dx = 0.5 * np.ones_like(zpos)
    dy = dx.copy()
    dz = data.flatten()
    
    ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color='b')
    
    #sh()
    ax.w_xaxis.set_ticklabels(column_names)
    ax.w_yaxis.set_ticklabels(row_names)
    ax.set_xlabel('Letter')
    ax.set_ylabel('Day')
    ax.set_zlabel('Occurrence')
    
    plt.show()
    

¿Fue útil?

Solución

Para hacer semitransparentes las barras, solo tiene que usar el parámetro alfa.alfa= 0 significa 100% transparente, mientras que alfa= 1 (el valor predeterminado) significa 0% transparente.

Pruebe esto, funcionará para hacer las barras semitransparentes:

ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color='b', alpha=0.5)

Con respecto a la ubicación de las garrapatas, puede hacerlo usando algo como esta (la primera lista de plt.xticks o plt.yticks contiene los "valores", ¿dónde desea localizar las garrapatas y la segunda lista contiene lo que realmente contiene?quiere llamar a las garrapatas):

#ax.w_xaxis.set_ticklabels(column_names)
#ax.w_yaxis.set_ticklabels(row_names)

ticksx = np.arange(0.5, 5, 1)
plt.xticks(ticksx, column_names)

ticksy = np.arange(0.6, 7, 1)
plt.yticks(ticksy, row_names)

Al final, recibo esta figura: ingrese la descripción de la imagen aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top