Преобразования сложны из-за различных систем координат.См. 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](https://i.stack.imgur.com/hDNN8.png)
Это должно быть легко изменить, если вам нужна форма, переведенная или масштабированная неравномерно по x и y.