Estoy tratando de trazar una imagen pequeña en python usando matplotlib y me gustaría que los ejes mostrados tengan la misma forma que la matriz numpy desde la que se generó, es decir, los datos no se deben volver a muestrear. En otras palabras, cada entrada en la matriz debe corresponder a un píxel (o aproximadamente) en la pantalla. Esto parece trivial, pero incluso después de buscar en la Internet para rato, me parece que no puede conseguir que funcione:matplotlib gráfico imagen pequeña sin remuestreo
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
X = np.random.rand(30,40)
fig = plt.figure()
fig.add_axes(aspect="equal",extent=[0, X.shape[1], 0, X.shape[0]])
ax = fig.gca()
ax.autoscale_view(True, False, False)
ax.imshow(X, cmap = cm.gray)
plt.show()
parece que el código que proporcionó tiene el truco que desea, la forma rectangular (40x30) se conserva en la imagen graficada, y los límites del eje coinciden con la forma de la imagen. ¿Extraño algo en tu pregunta? – gcalmettes
Lo siento mi fraseo es confuso. Lo que me interesa es algo así como la funcionalidad imshow en matlab, donde el número de píxeles en la pantalla coincide con el número de entradas en la matriz, es decir, los ejes no se remuestrean para que coincidan con el tamaño de la figura. – user588241
¿Quiere decir que tiene una imagen sin interpolación? Si es así, simplemente cambie su código 'imshow' con' matshow', o agregue 'interpolation = 'nearest'' como parámetro para la función imshow. – carla