Я создаю 2D-массивы на осях с лог-интервалом (например, координаты x-пикселя генерируются с использованием logspace(log10(0.95), log10(2.08), n)
.
Я хочу отобразить изображение, используя простой старый imshow, в своем собственном разрешении и масштабировании (мне не нужно растянуть его; сами данные уже log scaled), но я хочу добавить тики, метки, строки, которые находятся в правильном месте на осях журнала. Как это сделать?
В идеале я мог бы просто использовать командную строку 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')
Этот пример не работает, потому что extent = применяется только к линейным масштабам, поэтому, когда вы выполняете axvline на 100, он не отображается в центре. Я хотел бы, чтобы ось x показывала 10, 100, 1000 и axvline(100)
, чтобы поместить линию в центр в 100 точках, тогда как пиксели оставались на равном расстоянии.