2010-11-26 176 views
13

我想在matplotlib旋轉矩形,但是當我申請改造,矩形不會再顯示:Matplotlib:旋轉補丁

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

這是一個已知的錯誤還是我犯了一個錯誤?

+0

你能否詳細說明這個問題,你究竟想在這裏做什麼? – steabert 2010-11-26 14:05:20

+0

我想爲我的「ax」添加一個`Rectangle`(這個工作正常),但不是一個直的矩形,我希望它傾斜45度。最後的目標是代表軸上的「切割」。 – Mermoz 2010-11-26 14:11:01

回答

7

顯然,補丁上的變換是用於處理縮放和邊界框的幾種變換的組合。將變換添加到現有的陰謀變換似乎給了更多像你期望的東西。雖然看起來仍然有一個抵消的工作。

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

中所提供的代碼的補丁使得它很難說這是怎麼回事,所以我做了一個清楚地表明,我從一個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