estoy generando matrices 2D sobre ejes espaciados logarítmicamente (por ejemplo, las coordenadas x de píxeles se generan utilizando logspace(log10(0.95), log10(2.08), n)
.ejes no lineales para imshow en matplotlib
Quiero mostrar la imagen utilizando un imshow llanura de edad, en su resolución y escalado nativo (no necesito to stretch it; los datos en sí ya están en escala de registro), pero quiero agregar ticks, etiquetas, líneas que están en el lugar correcto en los ejes de registro. ¿Cómo hago esto?
Idealmente podría usar los comandos de la línea axvline(1.5)
y la línea estaría en el lugar correcto (58% desde la izquierda), pero si la única manera es traducir manualmente entre las coordenadas de la escala de log y la imagen c oordinates, eso está bien, también.
Para ejes lineales, usar extents=
en la llamada para imshow hace lo que quiero, pero no veo una manera de hacer lo mismo con un eje de registro.
Ejemplo:
from matplotlib.colors import LogNorm
x = logspace(log10(10), log10(1000), 5)
imshow(vstack((x,x)), extent=[10, 1000, 0, 100], cmap='gray', norm=LogNorm(), interpolation='nearest')
axvline(100, color='red')
Este ejemplo no funciona, ya medida = sólo se aplica a escalas lineales, así que cuando lo hace axvline a 100, que no aparece en el centro. Me gustaría que el eje x muestre 10, 100, 1000 y axvline(100)
para poner una línea en el centro en el punto 100, mientras que los píxeles permanecen igualmente espaciados.
Puede tener algún código de trabajo o imagen de lo que quiere lograr. Otra pregunta es si usted es flexible sobre el uso de pcolor en lugar de imshow. – imsc
@imsc: agregó un ejemplo. Creo que pcolor está bien. – endolith