Нелинейные оси для imshow в matplotlib
Я генерирую двумерные массивы на осях с логарифмическими координатами (например, координаты x пикселей создаются с использованиемlogspace(log10(0.95), log10(2.08), n)
.
Я хочу отобразить изображение с помощью простого старого imshow с его собственным разрешением и масштабированием (мне это не нужно)растянуть это; сами данные уже масштабируются в журнале), но я хочу добавить галочки, метки, линии, которые находятся в правильном месте на осях журнала. Как мне это сделать?
В идеале я мог бы просто использовать командную строкуaxvline(1.5)
и линия была бы в правильном месте (58% слева), но если единственный способ - это вручную переводить координаты масштаба шкалы и координаты изображения, это тоже нормально.
Для линейных осей, используяextents=
в вызове imshow делает то, что я хочу, но я не вижу способа сделать то же самое с осью журнала.
Пример:
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')
Этот пример не работает, потому что экстент = применяется только к линейным масштабам, поэтому, когда вы делаете axvline на 100, он не появляется в центре. Мне бы хотелось, чтобы ось х показала 10, 100, 1000 иaxvline(100)
поставить линию в центре в точке 100, в то время как пиксели остаются на одинаковом расстоянии.