Eixos não lineares para imshow em matplotlib

Estou gerando matrizes 2D em eixos com espaçamento de log (por exemplo, as coordenadas de pixel x são geradas usandologspace(log10(0.95), log10(2.08), n).

Eu quero exibir a imagem usando um imshow antigo, em sua resolução nativa e escala (eu não precisoesticá-lo; os dados em si já são log escalados), mas eu quero adicionar carrapatos, rótulos, linhas que estão no lugar correto nos eixos do log. Como eu faço isso?

Idealmente, eu poderia usar apenas linha de comandosaxvline(1.5) e a linha estaria no lugar correto (58% da esquerda), mas se a única maneira é traduzir manualmente entre coordenadas de escala de log e coordenadas de imagem, tudo bem também.

Para eixos lineares, usandoextents= na chamada para imshow faz o que eu quero, mas eu não vejo uma maneira de fazer a mesma coisa com um eixo de log.

Exemplo:

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 exemplo não funciona, porque extent = só se aplica a escalas lineares, então quando você faz axvline em 100, ele não aparece no centro. Eu gostaria que o eixo x mostrasse 10, 100, 1000 eaxvline(100) para colocar uma linha no centro no ponto 100, enquanto os pixels permanecem igualmente espaçados.

questionAnswers(2)

yourAnswerToTheQuestion