Nieliniowe osie dla imshow w matplotlib

Generuję tablice 2D na osiach rozmieszczonych w logach (na przykład współrzędne x pikseli są generowane przy użyciulogspace(log10(0.95), log10(2.08), n).

Chcę wyświetlić obraz używając zwykłego starego imshow, w jego natywnej rozdzielczości i skalowaniu (nie potrzebujęrozciągnąć to; same dane są już skalowane do dziennika), ale chcę dodać znaczniki, etykiety, linie, które są we właściwym miejscu na osiach dziennika. Jak mam to zrobic?

Najlepiej byłoby po prostu użyć linii poleceńaxvline(1.5) linia byłaby we właściwym miejscu (58% od lewej), ale jeśli jedynym sposobem jest ręczne przetłumaczenie współrzędnych logscale i współrzędnych obrazu, to też jest w porządku.

Dla osi liniowych, używającextents= w rozmowie z imshow robi to, co chcę, ale nie widzę sposobu, aby zrobić to samo z osią dziennika.

Przykład:

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')

Ten przykład nie działa, ponieważ zasięg = dotyczy tylko skal liniowych, więc gdy robisz axvline na 100, nie pojawia się w środku. Chciałbym, aby oś x pokazywała 10, 100, 1000 iaxvline(100) aby umieścić linię w środku w punkcie 100, podczas gdy piksele pozostają w równych odstępach.

questionAnswers(2)

yourAnswerToTheQuestion