Matplotlib: вращение патча - PullRequest
       17

Matplotlib: вращение патча

14 голосов
/ 26 ноября 2010

Я хотел повернуть прямоугольник в matplotlib, но когда я применяю преобразование, прямоугольник больше не отображается:

rect = mpl.patches.Rectangle((0.0120,0),0.1,1000)
t = mpl.transforms.Affine2D().rotate_deg(45)
rect.set_transform(t)

это известная ошибка или я ошибаюсь?

Ответы [ 2 ]

18 голосов
/ 03 февраля 2011

Патч в предоставленном коде затрудняет понимание происходящего, поэтому я наглядно продемонстрировал, что я работал на примере matplotlib:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib as mpl

fig = plt.figure()
ax = fig.add_subplot(111)

r1 = patches.Rectangle((0,0), 20, 40, color="blue", alpha=0.50)
r2 = patches.Rectangle((0,0), 20, 40, color="red",  alpha=0.50)

t2 = mpl.transforms.Affine2D().rotate_deg(-45) + ax.transData
r2.set_transform(t2)

ax.add_patch(r1)
ax.add_patch(r2)

plt.xlim(-20, 60)
plt.ylim(-20, 60)

plt.grid(True)

plt.show()

enter image description here

9 голосов
/ 26 ноября 2010

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

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib as mpl
fig = plt.figure()
ax = fig.add_subplot(111)

rect = patches.Rectangle((0.0120,0),0.1,1000)

t_start = ax.transData
t = mpl.transforms.Affine2D().rotate_deg(-45)
t_end = t_start + t

rect.set_transform(t_end)

print repr(t_start)
print repr(t_end)
ax.add_patch(rect)

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