matplotlib:imshow() 上的 scatter() 在收缩坐标上显示点

matplotlib: scatter() on imshow() show points on shrunk coordinates

我有一个二维数组 img_pseudo_df,我用 imshow() 绘制它并表示一些伪荧光数据,其中每个荧光点的中心代表一个细胞:

img = plt.imshow(img_pseudo_df.T, cmap=plt.cm.gray, interpolation='none', extent=(0.0,N_pixels,0.0,N_pixels))

在上面,我先验地将图形的大小固定为 N_pixels,为了方便起见,我正在转置图像。 结果图如下所示:

在此图之上,我想叠加一个 scatter() 图,其中每个点代表一个单元格。我正在传递像素值中的散点 xy 坐标(每个都在 [0,N_pixels] 区间内):

plt.scatter(x,y)

然而由于某些原因,这些坐标相对于图中的荧光坐标似乎缩小了:

我不知道我做错了什么以及如何使 imshow 坐标与我的点相匹配。这显然是 imshow() 的一个常见问题,但到目前为止我找不到适合我的答案。

特别是,xy 包含 img_pseudo_df 数组的行列的索引值。此数组最初由

创建
img_pseudo_df = zeros((N_pixels,N_pixels))

然后 img_pseudo_df 中的像素 (x,y) 被分配一个特定的 signal 值并通过 2D 高斯滤波器进行卷积(以创建伪荧光外观):

for cell,pixel in enumerate(zip(x,y)):
    img_pseudo_df[pixel] = signals[cell] # signals contains N cells values and there are N cells (x,y) pairs
img_pseudo_df = convolve2d(space, gaussian_kern(20), mode='valid') 

由于过滤器以零为中心并且由以下人员构建:

def gauss_kern(size, sizey=None):
""" Returns a normalized 2D gauss kernel array for convolutions """
size = int(size)
if not sizey:
    sizey = size
else:
    sizey = int(sizey)
x, y = mgrid[-size:size+1, -sizey:sizey+1]
g = exp(-(x**2/float(size)+y**2/float(sizey)))
return g / g.sum()

我希望荧光点位于细胞位置的中心 (x,y)

在此先感谢您的帮助。

干杯,

好的,卷积确实有错误。正确的选项是mode='same',以便使结果数字匹配原来空的'img_pseudo_df'。

干杯,