Учитывая набор значений x
и y
, а также набор peaks
(x
-координат пиков), вот как вы можете автоматически найдите площадь под каждым из пиков. Я предполагаю, что x
, y
и peaks
являются массивами Numpy:
import numpy as np
# find the minima between each peak
ixpeak = x.searchsorted(peaks)
ixmin = np.array([np.argmin(i) for i in np.split(y, ixpeak)])
ixmin[1:] += ixpeak
mins = x[ixmin]
# split up the x and y values based on those minima
xsplit = np.split(x, ixmin[1:-1])
ysplit = np.split(y, ixmin[1:-1])
# find the areas under each peak
areas = [np.trapz(ys, xs) for xs,ys in zip(xsplit, ysplit)]
Вывод:
Примеры данных были настроены таким образом, чтобы площадь под каждым пиком (более или менее) была гарантированно равна 1.0
, поэтому результаты на нижнем графике верны. Зеленые метки X - это места минимума между каждыми двумя пиками. Часть кривой, «принадлежащая» каждому пику, определяется как часть кривой между минимумами, примыкающими к каждому пику.
Вот полный код, который я использовал для генерации данных примера:
import scipy as sp
import scipy.stats
prec = 1e5
n = 10
N = 150
r = np.arange(0, N+1, N//n)
# generate some reasonable fake data
peaks = np.array([np.random.uniform(s, e) for s,e in zip(r[:-1], r[1:])])
x = np.linspace(0, N + n, num=int(prec))
y = np.max([sp.stats.norm.pdf(x, loc=p, scale=.4) for p in peaks], axis=0)
и код, который я использовал для построения графиков:
import matplotlib.pyplot as plt
# plotting stuff
plt.figure(figsize=(5,7))
plt.subplots_adjust(hspace=.33)
plt.subplot(211)
plt.plot(x, y, label='trace 0')
plt.plot(peaks, y[ixpeak], '+', c='red', ms=10, label='peaks')
plt.plot(mins, y[ixmin], 'x', c='green', ms=10, label='mins')
plt.xlabel('dep')
plt.ylabel('indep')
plt.title('Example data')
plt.ylim(-.1, 1.6)
plt.legend()
plt.subplot(212)
plt.bar(np.arange(len(areas)), areas)
plt.xlabel('Peak number')
plt.ylabel('Area under peak')
plt.title('Area under the peaks of trace 0')
plt.show()
Я понимаю, что исходный вопрос, который задают для виртуального решения, однако, по состоянию на это время, нет легального способа эмулировать Mac на аппаратных средствах не-Apple.
Сервис как BrowserCam является лучшим выбором, если Вы совершенно настроены против покупки Mac. Удаленный доступ от BrowserCam составляет приблизительно 400$ в год, и у них есть более дешевые пакеты, которые могут подойти.
В зависимости от того, как часто (и на какой браузеры/платформы) необходимо протестировать, можно хотеть считать покупку Mac Мини-. Обновленные Мини-выполнения между 500$ и 600$ и может быть более дешевым за длительный период.
Если межплатформенное тестирование является центральным к бизнесу Вашей компании, основанный на Intel Mac в натуральную величину, выполняющий и OS X и Windows (с Параллелями, BootCamp или VMware) для тестирования, может быть более оптимальным вариантом.
Проверьте Проект OSx86. Я использовал это прежде, это работает вполне хорошо и довольно легко понять.