Наложение lineCollection на сюжет в matplotlib - как заставить эти два выстроиться в линию. - PullRequest
6 голосов
/ 26 октября 2011

Я пытаюсь создать тепловую карту над файлом формы в python. Мне нужно сделать довольно много из них, поэтому я не хочу каждый раз читать в .shp.

Вместо этого я подумал, что мог бы создать экземпляр lineCollection границ карты и наложить два изображения. Проблема в том, что я не могу заставить их правильно выстроиться.

Вот код, где linecol - это объект lineCollection.

fig = plt.figure()
ax = fig.add_subplot(111)
ax.contourf(xi,yi,zi)
ax.add_collection(linecol, autolim = False)
plt.show()

Есть ли простой способ исправить пределы linecol так, чтобы они соответствовали границам другого графика? Я поиграл с set_xlim и transforms.Bbox, но не могу справиться.

Большое спасибо за помощь!

1 Ответ

3 голосов
/ 07 февраля 2012

Преобразования сложны из-за различных систем координат.См. http://matplotlib.sourceforge.net/users/transforms_tutorial.html.

Мне удалось масштабировать LineCollection до соответствующего размера, как этот.Ключ должен был понять, что мне нужно добавить + ax.transData к новому преобразованию, которое я установил на LineCollection.(Если вы не установили никакого преобразования для объекта Artist, по умолчанию ax.transData. Он преобразует координаты данных в координаты экрана.)

from matplotlib import cm
import matplotlib.pyplot as plt
import matplotlib.collections as mc
import matplotlib.transforms as tx
import numpy as np

fig = plt.figure()

# Heat map spans 1 x 1.
ax = fig.add_subplot(111)
xs = ys = np.arange(0, 1.01, 0.01)
zs = np.random.random((101,101))
ax.contourf(xs, ys, zs, cmap=cm.autumn)

lines = mc.LineCollection([[(5,1), (9,5), (5,9), (1,5), (5,1)]])
# Shape spans 10 x 10. Resize it to 1 x 1 before applying the transform from
# data coords to display coords.
trans = tx.Affine2D().scale(0.1) + ax.transData
lines.set_transform(trans)
ax.add_collection(lines)

plt.show()

(Вывод здесь: http://i.stack.imgur.com/hDNN8.png Недостаточно репутации, чтобы разместить пост.) enter image description here

Это должно быть легко изменить, если вам нужна форма, переведенная или масштабированная неравномерно по x и y.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...