matrices - matplotlib: barras de color y sus etiquetas de texto
python graficos 2d (1)
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap
#discrete color scheme
cMap = ListedColormap([''white'', ''green'', ''blue'',''red''])
#data
np.random.seed(42)
data = np.random.rand(4, 4)
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, cmap=cMap)
#legend
cbar = plt.colorbar(heatmap)
cbar.ax.get_yaxis().set_ticks([])
for j, lab in enumerate([''$0$'',''$1$'',''$2$'',''$>3$'']):
cbar.ax.text(.5, (2 * j + 1) / 8.0, lab, ha=''center'', va=''center'')
cbar.ax.get_yaxis().labelpad = 15
cbar.ax.set_ylabel(''# of contacts'', rotation=270)
# 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)
ax.invert_yaxis()
#labels
column_labels = list(''ABCD'')
row_labels = list(''WXYZ'')
ax.set_xticklabels(column_labels, minor=False)
ax.set_yticklabels(row_labels, minor=False)
plt.show()
Estabas muy cerca. Una vez que tenga una referencia al eje de la barra de color, puede hacer lo que quiera, incluso colocar etiquetas de texto en el medio. Es posible que desee jugar con el formato para hacerlo más visible.
Me gustaría crear una leyenda de barra de colores para un mapa de calor, de modo que las etiquetas estén en el centro de cada color discreto. Por favor, mira el siguiente ejemplo ( tomado de aquí )
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap
#discrete color scheme
cMap = ListedColormap([''white'', ''green'', ''blue'',''red''])
#data
np.random.seed(42)
data = np.random.rand(4, 4)
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, cmap=cMap)
#legend
cbar = plt.colorbar(heatmap)
cbar.ax.set_yticklabels([''0'',''1'',''2'',''>3''])
cbar.set_label(''# of contacts'', rotation=270)
# 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)
ax.invert_yaxis()
#lebels
column_labels = list(''ABCD'')
row_labels = list(''WXYZ'')
ax.set_xticklabels(column_labels, minor=False)
ax.set_yticklabels(row_labels, minor=False)
plt.show()
que genera la siguiente gráfica:
Idealmente, me gustaría generar una barra de leyenda que tenga los cuatro colores y para cada color, una etiqueta en su centro: 0,1,2,3,> 4