Нелинейные оси -для imshow в matplotlib

Например, я генерирую 2D-массивы на логарифмических -разнесенных осях (, координаты 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')

Этот пример не работает, потому что extension= применяется только к линейным масштабам, поэтому, когда вы делаете axvline на 100, он не появляется в центре. Я хотел бы, чтобы ось x показывала 10, 100, 1000, а axvline(100)поместила линию в центре в точке 100,в то время как пиксели остаются на одинаковом расстоянии друг от друга.

17
задан Community 23 May 2017 в 12:17
поделиться