Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果我显示图片,绘图正在更改其大小_Python_Matplotlib_Rectangles - Fatal编程技术网

Python 如果我显示图片,绘图正在更改其大小

Python 如果我显示图片,绘图正在更改其大小,python,matplotlib,rectangles,Python,Matplotlib,Rectangles,我需要一些代码方面的帮助。 我想用一张图片作为背景。 这张图片将是一个测量设备,所以我可以看到设备在哪个位置具有哪个速度。 不幸的是,每当我激活第47行时: ax3.imshow(img, extent=[x1, x3, 0, max(ID2)]) 使用矩形选择器选择区域后,第三个绘图将更改其大小。 47号线没有问题吗。 你知道问题出在哪里吗 地块1和地块2: x轴:行驶路线 y轴:速度 地块3: x轴:行驶路线 y轴:Wt(设备在管道中传输。顶部和底部线是管道的直径。) 这是我的照片。 (目

我需要一些代码方面的帮助。 我想用一张图片作为背景。 这张图片将是一个测量设备,所以我可以看到设备在哪个位置具有哪个速度。 不幸的是,每当我激活第47行时:

ax3.imshow(img, extent=[x1, x3, 0, max(ID2)])
使用矩形选择器选择区域后,第三个绘图将更改其大小。 47号线没有问题吗。 你知道问题出在哪里吗

地块1和地块2: x轴:行驶路线 y轴:速度

地块3: x轴:行驶路线 y轴:Wt(设备在管道中传输。顶部和底部线是管道的直径。)

这是我的照片。 (目前它只是一个红色背景,由油漆制成,作为占位符,我可以看到代码是否正常工作。)

我还有一个问题你可以回答: 矩形是否可能保持最大y轴大小。 这意味着我只能将他左右移动,不能再上下移动

我希望我写得足够清楚。 如果你有任何问题,请告诉我

谢谢你,并致以最良好的问候

from matplotlib.widgets import RectangleSelector
import matplotlib.pyplot as plt


'''Daten einlesen'''

x = [1,2,3,4,5,6,7,8,9,10]
y = [1,1,2,1,0,0,1,3,5,1]
ID1 = [5,5,5,5,5,5,5,5,5,5]
ID2 = [200,200,200,200,200,200,200,200,200,200]

img = plt.imread("bild.png")

'''PLotten'''

plt.close()

fig, (ax1, ax2, ax3) = plt.subplots(3)


def Daten_plotten (ax, xx, yy):
    ax.plot(xx,yy)
    ax.set_xlim([min(xx)-1, max(xx)+1])
    ax.set_ylim([min(yy)-0.5, max(yy)+0.5])

Daten_plotten(ax1,x,y,)
Daten_plotten(ax2,x,y)
Daten_plotten(ax3,x,ID1)
Daten_plotten(ax3,x,ID2)
ax3.set_xlim([min(x), max(x)])
ax3.set_ylim([0,max(ID2)+1])


def line_select_callback_ax1(eclick, erelease):
    'eclick and erelease are the press and release events'
    x1, y1 = eclick.xdata, min(y)-0.5
    x2, y2 = erelease.xdata, max(y)+0.5
    x3 = x1 + (x2-x1)/2
    
    print("(%3.2f) --> (%3.2f)" % (x1, x2))
    print(x3)
                  
    ax2.set_xlim([x1, x2])
    ax2.set_ylim([y1, y2])
    
    
    ax3.imshow(img, extent=[x1, x3, 0, max(ID2)])
   
    ax3.set_xlim([x1, x2])
    ax3.set_ylim([0, max(ID2)+1])
    
    plt.pause(0.01)
    fig.canvas.draw

RS = RectangleSelector(ax1, line_select_callback_ax1,
                                       drawtype='box', useblit=True,
                                       button=[1, 3],  # don't use middle button
                                       minspanx=1, minspany=1,
                                       spancoords='pixels',
                                       interactive=True)

plt.show()

默认情况下,
imshow
将数据纵横比设置为1:1,因此当您选择一个区域时,它会更改轴的大小,以匹配所选数据范围的纵横比。如果希望轴的大小保持不变,您可以设置
aspect='auto'
。这很有效。谢谢。