嘿,我正在为一个实习项目制作缩放功能。通常我会使用matplotlib中已经提供的plots和诸如此类的缩放功能,但是有一种特殊的方式,我们希望一次分析多个图像,而zoom不支持这种方式。我试图编写一种缩放函数,它将获取一个数组,并仅对我想用imshow()
显示的片段进行切片。下面是我正在尝试做的一个例子:
import matplotlib.pyplot as plt
from matplotlib.widgets import Button, Slider
import numpy as np
arr = np.zeros([100,100])
for i in range(0,99):
for j in range(0,99):
if i % 2 == 0 and j % 2 == 0:
arr[i][j] = 10
if i % 3 == 0 and j % 3 == 0:
arr[i][j] = -7
plt.figure(1)
axpic = plt.subplot2grid((1,1),(0,0), rowspan = 1, colspan = 1)
plt.figure(2)
ax1 = plt.subplot2grid((5,5),(0,0), rowspan = 1, colspan = 4)
ax2 = plt.subplot2grid((5,5),(1,0), rowspan = 1, colspan = 4)
ax3 = plt.subplot2grid((5,5),(2,0), rowspan = 1, colspan = 4)
ax4 = plt.subplot2grid((5,5),(3,0), rowspan = 1, colspan = 4)
axbutton = plt.subplot2grid((5,5),(4,4), rowspan = 1, colspan = 1)
s1 = Slider(ax1, 'Row Begin', 0, 99, valinit=0)
s2 = Slider(ax2, 'Row End', 0, 99, valinit=99)
s3 = Slider(ax3, 'Col Begin', 0, 99, valinit=0)
s4 = Slider(ax4, 'Col End', 0, 99, valinit=99)
zoom = Button(axbutton, 'Zoom')
def dat_view_doe(event):
if event == 'Nothing':
axpic.imshow(arr, cmap = 'RdBu')
else:
plt.figure(1)
axpic.cla()
axpic.imshow(arr[int(s1.val):int(s2.val)][int(s3.val):int(s4.val)], cmap = 'RdBu')
plt.ylim(0, s2.val-s1.val)
plt.xlim(0, s4.val-s3.val)
zoom.on_clicked(dat_view_doe)
dat_view_doe('Nothing')
plt.show()
缩放会剪切过多的行,而不会剪切图像数组中的任何列。我不确定是否有语法方面的错误,或者是否有更深层次的问题。谢谢你的帮助
代码中至少有一个可能的问题是,在调用imshow时,您都在分割
arr
,同时更改轴限制(并将这些限制从零设置为max-min)。我建议每次只需使用以下代码调整轴:相关问题 更多 >
编程相关推荐