I have a 2D array img_pseudo_df
that I plot by imshow()
and represents some pseudo fluorescence data where the center of each florescence spot represents a cell:
img = plt.imshow(img_pseudo_df.T, cmap=plt.cm.gray, interpolation='none', extent=(0.0,N_pixels,0.0,N_pixels))
In the above I am fixing a priori the size of the figure to N_pixels
and I am transposing the image for my convenience.
The resulting figure looks like for example:
On top of this figure, I want to overlay a scatter()
plot where each point represents a cell. I am passing to scatter x
and y
coordinates in pixel values (each within the interval [0,N_pixels]
):
plt.scatter(x,y)
However for some reason these coordinates seem shrunk with respect to the coordinates of the fluorescence in the figure:
I cannot figure out what I am doing wrong and how to get matching of imshow coordinates with those of my points. This is apparently a common problem with imshow()
but I could not find an answer that works for me so far.
In particular, x
and y
contain the index values for the row columns of img_pseudo_df
array. This array is created originally by
img_pseudo_df = zeros((N_pixels,N_pixels))
Then pixels (x,y)
in img_pseudo_df
are assigned a certain signal
value and convolved by a 2D gaussian filter (to create the pseudo fluorescence appeareance):
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')
As the filter is centered around zero and is built by:
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()
I would expect the fluorescence point to be center at the cell locations (x,y)
.
Thanks in advance for your help.
Cheers,
M
Ok, there was indeed an error in the convolution. The right option was
mode='same'
so as to make the resulting figure match the originally empty `img_pseudo_df'.Cheers,
M