2015-06-23 2 views
0

У меня есть 2D массив img_pseudo_df, что я сюжет по imshow() и представляет некоторые данные псевдо флуоресценции, где в центре каждого цветения месте представляет собой ячейку:Matplotlib: разброс() на imshow() показывают точки на Shrunk координаты

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() участок, где каждая точка представляет собой ячейку. Я передаю разбрасывать x и y координаты в пиксельных значений (каждый в пределах интервала [0,N_pixels]):

plt.scatter(x,y) 

Однако по какой-то причине эти координаты кажутся сократилась по координатам флуоресценции на рисунке:

enter image description here

Я не могу понять, что я делаю неправильно, и как получить соответствие координат imshow с данными моих точек. Это, по-видимому, общая проблема с imshow(), но я не мог найти ответ, который работает для меня до сих пор.

В частности, x и y содержат значения индекса для столбцов строк массива img_pseudo_df. Этот массив создается первоначально

img_pseudo_df = zeros((N_pixels,N_pixels)) 

Затем пикселей (x,y) в img_pseudo_df присваиваются определенное signal значения и свернуты гауссовый фильтр 2D (для создания псевдо флуоресценции 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') 

В качестве фильтра центрируется вокруг нуля и строится по:

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() 

Я ожидаю, что флуоресценция poi nt быть центром в ячейках (x,y).

Заранее за вашу помощь.

Приветствия,

M

+2

Как создать 'x' и' y'? Может быть, ценности ошибочны? – hitzg

+0

@hitzg Спасибо, что указали это: я отредактировал свое сообщение соответственно. – maurizio

ответ

0

Хорошо, была действительно ошибка в свертке. Правильный вариант был mode='same', чтобы итоговая фигура совпадала с первоначальным пустым `img_pseudo_df '.

Приветствия,

M

Смежные вопросы