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

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

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

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

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

4b9b3361

Ответ 1

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

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()

Ответ 2

Патч в предоставленном коде не позволяет понять, что происходит, поэтому я сделал четкую демонстрацию, которую я разработал из примера 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

Ответ 3

Я верю, что вы можете добавить

ax.axis( "равно")