es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hacer la matriz de mapa de color en pantalla completa en Python Matplotlib?

enter image description hereQuería hacer un mapa de contacto utilizando la función sparse.matrix junto con la función colormap del módulo matplotlib de Python. Pude generar el gráfico, pero el mapa de colores 2D se condensa solo en la esquina izquierda independientemente del rango x. ¿Cómo puedo hacer que el mapa de colores 2D se muestre en pantalla completa? Utilicé los siguientes comandos para generar el gráfico:-

trajectory_contacts1 = ContactFrequency(t1, switch1, switch2)
sparse_cm1 = trajectory_contacts1.residue_contacts.sparse_matrix
cm1 = sparse_cm1.todense()

with open('CM-pE42-Ab1-42.dat', 'wb') as f1:
    np.savetxt(f1, np.array(cm1), fmt='%.2f1')

# Importar datos desde el archivo
CM1 = np.loadtxt(fname="CM-pE42-Ab1-42_Cluster-1.dat")

# Plot del mapa de contacto para Ab1-42 y pE-Ab3-42

from matplotlib import cm as cmp
cmap = cmp.get_cmap('Spectral_r', 50)
plt.matshow(CM1, cmap=cmap, interpolation='None')
ax = plt.gca()
ax.set_xlabel('Número de residuo', fontsize=12)
ax.set_ylabel('Número de residuo', fontsize=12)
ax.set_aspect('auto')
tick_params(bottom=True, right=True, labelbottom=True, labelright=True)
plt.savefig("CM-pE42-Ab1-42_Cluster-3.png", dpi=300, format="png", bbox_inches='tight')

Aquí está el enlace de Dropbox para el archivo .dat: https://www.dropbox.com/s/zqh4w541s6sohmj/CM-pE42-Ab1-42_Cluster-1.dat?dl=0

Por favor, ayúdeme con las sugerencias para corregir el script y obtener el gráfico 2D en pantalla completa.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el gráfico actual es que la función matshow() ajusta automáticamente los límites del eje para adaptarse a los datos mostrados. Para representar el mapa de colores 2-D en el marco completo, se deben establecer manualmente los límites de x e y del gráfico para abarcar todo el rango de los datos. Esto se puede lograr utilizando las funciones xlim() e ylim() del objeto de ejes.

    Aquí está el código modificado que establece los límites de x e y y guarda el gráfico en el marco completo:

    # Contact Map Plot for Ab1-42 & pE-Ab3-42
    from matplotlib import cm as cmp
    cmap = cmp.get_cmap('Spectral_r', 50)
    plt.matshow(CM1, cmap=cmap, interpolation='None')
    
    ax = plt.gca()
    ax.set_xlabel('Número de Residuo', fontsize=12)
    ax.set_ylabel('Número de Residuo', fontsize=12)
    ax.set_aspect('auto')
    ax.set_xlim(0, len(CM1))
    ax.set_ylim(len(CM1), 0)  # invertir eje y
    
    plt.tick_params(bottom=True, right=True, labelbottom=True, labelright=True)
    plt.savefig("CM-pE42-Ab1-42_Cluster-3.png", dpi=300, format="png", bbox_inches='tight')
    

    Ten en cuenta que la función set_ylim() se utiliza para invertir el eje y, de modo que el gráfico sea consistente con los mapas de contacto convencionales.

    ¡Espero que esto ayude! Avísame si tienes alguna pregunta adicional.

Comments are closed.