Как преобразовать (или масштабировать) значения оси и переопределить частоту тиков в matplotlib? - PullRequest
20 голосов
/ 17 июля 2009

Я показываю изображение 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' '(то есть, градусы, угловые минуты, arcsecs)

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

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

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

Приветствия

Dave

1 Ответ

33 голосов
/ 17 июля 2009

Похоже, вы имеете дело с интерфейсом 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
  • Axes - это пространство, где на самом деле отображается то, что вы рисуете (т.е. ваш график)
  • Axis - это действительные оси x и y
  • Художники? Для меня это слишком глубоко в интерфейсе: мне никогда не приходилось беспокоиться об этом, хотя я редко использую модуль pyplot на производственных участках.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...