В основном у меня есть некоторые данные, из которых я сделал гистограмму. Там нет больших трудностей, просто используйте matplotlib.pyplot.hist(data,bins=num)
Тем не менее, я хочу сделать своеобразное обнаружение края Собела, где в основном находится гистограммный стол ith
(какой бы ни был жаргон) -2*(i-1)th+0*(i)th+2*(i+1)th
Я выяснил, что вы можете сделать (мои данные в columnated текстовых файлов)Обнаружение края гистограммы - python
import matplotlib.pyplot as plt
alldata = np.genfromtxt('filename', delimiter=' ')
data = alldata[:,18]
n,bins,patches = plt.hist(data,bins=30)
Который возвращает/дает
>>> n
array([3,0,3,3,6,1,...etc])
>>> bins
array([13.755,14.0298,14.3046,... etc])
>>> patches
<a list of 30 Patch objects>
Здесь я могу выполнять свою работу на n
, чтобы получить мой Собели отфильтрованный материал (Примечание стороны: я просто это итеративно o ver массив, есть ли более простой способ с чем-то вроде a = [-2,0,2]
?)
Итак, мой вопрос и проблема! Я понятия не имею, как потом воссоздать результат в виде гистограммы или линейного участка ... и держать ту же горизонтальную ось bins
UPDATE
Вот код, который я использовать, чтобы получить это далеко. Загрузить данные HERE
import numpy as np
import matplotlib.pyplot as plt
# ignore this, it is so it makes it easier to iterate over later.
filNM = 'S_MOS152_cut'
filID = filNM + '.txt'
nbins = 30
# extract the data from file
stars = np.genfromtxt(filID, delimiter=' ')
imag = stars[:,18]
# let's start the histogram dance
n,bins,patches = plt.hist(imag, bins=nbins)
# now apply the edge filter (manually for lack of a better way)
nnew=[0 for j in xrange(nbins)]
for i in range(0,len(n)):
if i==0:
nnew[i]=2*n[i+1]
elif i==len(n)-1:
nnew[i]=-2*n[i-1]
else:
nnew=-2*n[i-1]+2*n[i+1]
np.array(nnew)
# I do this because it now generates the same form
# output as if you just say >>> print plt.hist(imag, bins=nbins)
filt = nnew,bins,patches
print filt
Это не размер бина, что мне нужно работать на но 'n' существу он изменяет высота гистограмм .... – FriskyGrub
О, мой плохой. См. Править. –
Удивительный, выглядит многообещающим. Я немного побеспокоюсь об этом и вернусь к вам! С другой стороны, он должен работать точно! – FriskyGrub