matplotlib:imshow()上的scatter()在缩小坐标

时间:2015-06-23 10:34:20

标签: python-2.7 matplotlib coordinates scatter imshow

我有一个二维数组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,我为了方便而调换图像。 结果图如下所示:

enter image description here

在这个图的顶部,我想覆盖一个scatter()图,其中每个点代表一个单元格。我正在传递xy坐标的像素值(每个坐标在[0,N_pixels]区间内):

plt.scatter(x,y)

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

enter image description here

我无法弄清楚我做错了什么,以及如何将imshow坐标与我的点匹配。这显然是imshow()的常见问题,但到目前为止我找不到对我有用的答案。

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

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

然后(x,y)中的像素img_pseudo_df被分配了某个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)的中心位置。

提前感谢您的帮助。

干杯,

中号

1 个答案:

答案 0 :(得分:0)

好的,卷积确实存在错误。正确的选项是mode='same',以便使得到的数字与最初为空的`img_pseudo_df'匹配。

干杯,

M