matplotlib中修补程序的旋转未按预期工作

2024-09-23 22:26:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在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)

数据集[0][2]/1000)+3给出图表时间序列的开始+3秒

正在生成的图表的y值介于0和4之间,x值可以是任何值(这是一个力(y)与时间(x)的关系图)。在

上面的输出是为了使rect2(蓝色的)与rect(红色的)相同,但是旋转了45度。我得到的是:

http://i.stack.imgur.com/S1f7U.png

这是一个45度的旋转,但也是一个平移,我试着把它旋转(0,0,-45),但这似乎没有帮助。有人能看出我做错了什么吗?或者我误解了轮换的工作原理吗?在


Tags: rectselfaddmatplotlib图表figguifloat
1条回答
网友
1楼 · 发布于 2024-09-23 22:26:13

默认情况下,旋转是相对于原点定义的。您不希望围绕原点旋转蓝色矩形,而是围绕其中心点旋转。这与首先平移它使其中心位于原点相同,执行旋转,然后将其向后平移。在

幸运的是,matplotlib有一个方便的函数使您的生活更轻松:^{}。只要越过矩形的中心,你就会没事了。在

相关问题 更多 >