我正在尝试将旋转的矩形覆盖到matplotlib图表上。我有以下代码:
fig = Figure((3.8, 3.4))
subp = fig.add_subplot(111)
fig.axes[0].set_autoscale_on(False)
fig.axes[0].set_ylim([float(self.getConfig('GUI', 'chartmin', '-1')),float(self.getConfig('GUI', 'chartmax','4' ))])
fig.axes[0].set_xlim([dataSet[0][2]/1000,dataSet[-1][2]/1000])
fig.axes[0].yaxis.grid(True, which='major')
timevals = []
dataPoints = []
#timevals and datapoints are then populated and added to chart correctly, code removed for easier reading
subp.plot(timevals, dataPoints)
rect = matplotlib.patches.Rectangle( ((dataSet[0][2]/1000)+3,0), width=1.5, height=3, alpha=0.50)
rect2 = matplotlib.patches.Rectangle( ((dataSet[0][2]/1000)+3,0), width=1.5, height=3, color="red", alpha=0.50)
t_start = subp.transData
t = matplotlib.transforms.Affine2D().rotate_deg(-45)
t_end = t_start + t
rect.set_transform(t_end)
subp.add_patch(rect)
subp.add_patch(rect2)
dataSet [0] [2] / 1000)+3给出了图表时间序列的开始+3秒
正在生成的图表的y值介于0和4之间,x值可以是任何值(它是一个力(y)对时间(x)图)。
上面的输出意图是rect2(蓝色的)与rect(红色的)相同但旋转了45度。我真正得到的是:
http://i.stack.imgur.com/S1f7U.png
这是预期的45度旋转,但也是翻译,我尝试了rotate_deg_around(0,0,-45),但这似乎没有帮助。谁能看到我在这里做错了什么,还是我误解了旋转是如何工作的?
答案 0 :(得分:3)
默认情况下,旋转是相对于原点定义的。您不希望围绕原点旋转蓝色矩形,而是围绕其中心点旋转。这与首次翻译它的位置相同,使其中心位于原点,执行旋转,然后将其平移。
幸运的是,matplotlib有一个方便的功能,让您的生活更轻松:rotate_deg_around(x, y, degrees)
。只要通过矩形的中心就可以了。