Mover el eje x a la parte superior de un gráfico en matplotlib

Basándome en esta pregunta sobre los mapas de calor en matplotlib , quería mover los títulos del eje x a la parte superior de la ttwig.

import matplotlib.pyplot as plt import numpy as np column_labels = list('ABCD') row_labels = list('WXYZ') data = np.random.rand(4,4) fig, ax = plt.subplots() heatmap = ax.pcolor(data, cmap=plt.cm.Blues) # put the major ticks at the middle of each cell ax.set_xticks(np.arange(data.shape[0])+0.5, minor=False) ax.set_yticks(np.arange(data.shape[1])+0.5, minor=False) # want a more natural, table-like display ax.invert_yaxis() ax.xaxis.set_label_position('top') # <-- This doesn't work! ax.set_xticklabels(row_labels, minor=False) ax.set_yticklabels(column_labels, minor=False) plt.show() 

Sin embargo, llamar a set_label_position de matplotlib (como se mencionó anteriormente) no parece tener el efecto deseado. Aquí está mi salida:

introduzca la descripción de la imagen aquí

¿Qué estoy haciendo mal?

Utilizar

 ax.xaxis.tick_top() 

para colocar las marcas de verificación en la parte superior de la imagen. El comando

 ax.set_xlabel('X LABEL') ax.xaxis.set_label_position('top') 

afecta a la etiqueta, no a las marcas de verificación.

 import matplotlib.pyplot as plt import numpy as np column_labels = list('ABCD') row_labels = list('WXYZ') data = np.random.rand(4, 4) fig, ax = plt.subplots() heatmap = ax.pcolor(data, cmap=plt.cm.Blues) # put the major ticks at the middle of each cell ax.set_xticks(np.arange(data.shape[1]) + 0.5, minor=False) ax.set_yticks(np.arange(data.shape[0]) + 0.5, minor=False) # want a more natural, table-like display ax.invert_yaxis() ax.xaxis.tick_top() ax.set_xticklabels(column_labels, minor=False) ax.set_yticklabels(row_labels, minor=False) plt.show() 

introduzca la descripción de la imagen aquí

Desea set_ticks_position lugar de set_label_position :

 ax.xaxis.set_ticks_position('top') # the rest is the same 

Esto me da:

introduzca la descripción de la imagen aquí

tick_params es muy útil para configurar las propiedades de tick. Las tags se pueden mover a la parte superior con:

  ax.tick_params(labelbottom='off',labeltop='on') 

Tienes que hacer un masaje extra si quieres que las garrapatas (no las tags) aparezcan en la parte superior e inferior (no solo en la parte superior). La única forma en que podría hacer esto es con un cambio menor al código de unutbu:

 import matplotlib.pyplot as plt import numpy as np column_labels = list('ABCD') row_labels = list('WXYZ') data = np.random.rand(4, 4) fig, ax = plt.subplots() heatmap = ax.pcolor(data, cmap=plt.cm.Blues) # put the major ticks at the middle of each cell ax.set_xticks(np.arange(data.shape[1]) + 0.5, minor=False) ax.set_yticks(np.arange(data.shape[0]) + 0.5, minor=False) # want a more natural, table-like display ax.invert_yaxis() ax.xaxis.tick_top() ax.xaxis.set_ticks_position('both') # THIS IS THE ONLY CHANGE ax.set_xticklabels(column_labels, minor=False) ax.set_yticklabels(row_labels, minor=False) plt.show() 

Salida:

introduzca la descripción de la imagen aquí