jestem generowanie tablic 2D na osiach dziennika rozstawione (na przykład współrzędne x pikseli są generowane przy użyciu logspace(log10(0.95), log10(2.08), n)
.nieliniowe osie imshow w matplotlib
chcę wyświetlić obraz za pomocą zwykłego starych imshow, w natywnej rozdzielczości i skalowaniu (nie potrzebuję to stretch it, same dane są już skalowane), ale chcę dodać tiki, etykiety, linie, które są we właściwym miejscu na osiach dziennika. Jak to zrobić?
Idealnie mógłbym użyć linii poleceń axvline(1.5)
, a 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 obrazu c oordinate, to też jest ok.
Dla osi liniowych, przy użyciu extents=
w wywołaniu 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')
Przykład ten nie działa, ponieważ stopniu = stosuje się tylko do skal liniowych, więc kiedy robisz axvline na 100, to nie pojawia się w środku. Chciałbym, aby oś X pokazywała 10, 100, 1000 i axvline(100)
, aby umieścić linię pośrodku w punkcie 100, a piksele pozostają równomiernie rozmieszczone.
Czy masz jakiś działający kod lub obraz tego, co chcesz osiągnąć. Kolejne pytanie brzmi, czy jesteś elastyczny w używaniu pcolor zamiast imshow. – imsc
@imsc: dodano przykład. Myślę, że pcolor jest w porządku. – endolith