Подтвердить что ты не робот

Как преобразовать (или масштабировать) значения оси и переопределить частоту тика в matplotlib?

Я показываю jpg-изображение (я поворачиваю его на 90 градусов, если это актуально) и, конечно же, оси отображают пиксельные координаты. Я хотел бы преобразовать ось так, чтобы вместо отображения номера пикселя отобразилась моя единица выбора - будь то радианы, градусы или, в моем случае, астрономическая координата. Я знаю переход от пикселя к (например) степени. Вот фрагмент кода моего кода:

import matplotlib.pyplot as plt 
import Image
import matplotlib
thumb = Image.open(self.image)
thumb = thumb.rotate(90)
dpi = plt.rcParams['figure.dpi']
figsize = thumb.size[0]/dpi, thumb.size[1]/dpi
fig = plt.figure(figsize=figsize)
plt.imshow(thumb, origin='lower',aspect='equal')
plt.show()

... так что, следуя этому, могу ли я взять каждое значение, которое matplotlib будет печатать на оси, и изменить/заменить его на строку для вывода? Я хотел бы сделать это для определенного координатного формата - например, вместо угла 10,44 (градусов), я бы хотел, чтобы он читал 10 26 '24' '(то есть, градусы, arcmins, arcsecs)

Наконец, по этой теме, я бы хотел контролировать частоту тика на сюжете. Matplotlib может печатать значение оси каждые 50 пикселей, но я бы действительно хотел, чтобы каждая степень (например).

Похоже, я хотел бы определить какой-то массив с значениями пикселей и их преобразованными значениями (градусы и т.д.), которые я хочу отобразить, имея контроль над частотой дискретизации в диапазоне xmin/xmax.

Есть ли какие-либо специалисты matplotlib по переполнению стека? Если это так, спасибо за вашу помощь! Чтобы сделать это более учебным опытом, я бы очень хотел, чтобы его подталкивали в сторону учебников и т.д. По этой проблеме matplotlib. Я очень сильно смущен топорами, осьми, фигурами, художниками и т.д.

Приветствия,

Dave

4b9b3361

Ответ 1

Похоже, вы имеете дело с интерфейсом matplotlib.pyplot, что означает, что вы сможете обойти большую часть работы с художниками, топорами и т.п. Вы можете контролировать значения и метки меток с помощью команды matplotlib.pyplot.xticks, как показано ниже:

tick_locs = [list of locations where you want your tick marks placed]
tick_lbls = [list of corresponding labels for each of the tick marks]
plt.xticks(tick_locs, tick_lbls)

В вашем конкретном примере вам нужно будет вычислить, каковы отметки меток относительно единиц (то есть пикселей) исходного участка (поскольку вы используете imshow) - вы сказали, что знаете, как это сделать, однако.

Я не занимался изображениями, но вы можете использовать другой метод построения (например, pcolor), который позволяет вам предоставлять информацию x и y. Это может дать вам еще несколько опций для указания единиц вашего изображения.

Для учебных пособий вам было бы хорошо просмотреть галерею matplotlib - найти что-то, что вам нравится, и прочитать код, который его создал. Один из ребят в нашем офисе недавно купил книгу о визуализации Python - это может быть интересно посмотреть.

То, что я обычно думаю обо всех различных частях, выглядит следующим образом:

  • A Figure - контейнер для всех Axes
  • An Axes - это пространство, в котором на самом деле отображается то, что вы рисуете (т.е. ваш сюжет)
  • An Axis - это фактические оси x и y
  • Художники? Это слишком глубоко в интерфейсе для меня: мне никогда не приходилось об этом беспокоиться, хотя я редко использовал модуль pyplot на производственных графиках.