python繪圖-草履蟲種群增長(邏輯斯蒂方程)

效果

效果圖.png

數(shù)據(jù)

來自動物學實驗-自選實驗
image.png

原理

邏輯斯蒂增長曲線是種群研究中一個非常經(jīng)典的增長曲線擒悬,它依據(jù)邏輯斯蒂方程(微分形式),描述了在食物、空間等資源有限時,由于種群數(shù)量增長醉冤,食物、空間資源逐漸進入“僧多粥少”的局面篙悯,從而導致種群增速放緩并最終進入一種動態(tài)平衡的狀態(tài)蚁阳。

負密度依賴調(diào)節(jié)下的種群增長可用邏輯斯蒂模型(logistic model)描述:
\frac{dN}{dt} = rN(1-\frac{N}{K})
??:種群大小
??:內(nèi)稟增長率
??:環(huán)境承載力(carrying capacity)

  • 1844年比利時數(shù)學家P. Verhulst提出;1921年美國生物學家R. Pearl和L. Reed再發(fā)現(xiàn)鸽照,用于預測人口增長
    我們對這條式子進行變換螺捐,積分后得到:
    N = K/(1+e^{a - rt})
    進一步變換可以得到:
    a - rt = ln[(K-N)/N]
    可以近似看成直線,內(nèi)稟增長率r等于斜率的相反數(shù)

python實現(xiàn)

拆解一下我們的任務:

1.準備數(shù)據(jù)集移宅,從數(shù)據(jù)里算得K值(環(huán)境容納量)
2.對數(shù)據(jù)進行變換归粉,使之結(jié)構(gòu)上可以看成y = a + bx的形式,也就是一條直線
3.把擬合的直線畫出來漏峰,再依據(jù)截距(intercept)和斜率(slope)反解出原方程中的參數(shù)r(內(nèi)稟增長率)和截距a
4.通過反解的參數(shù)把邏輯斯蒂增長曲線畫出來

導入numpy糠悼、matplotlib.pyplot、stats三個模塊

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

設置字體(如果你也打算用中文標簽浅乔,最好用全局字體倔喂,不然會后悔)

plt.rcParams['font.family'] = 'SimSun'

準備數(shù)據(jù)集铝条,量比較小,可以使用numpy庫下的array數(shù)組

有人就要問了:為什么不用pandas庫下面的Series和dataframe席噩?
好問題班缰,當時的我并不熟悉dataframe,現(xiàn)在的我懶得改( ??? )
想畫幾個就放幾個數(shù)據(jù)集進來悼枢,也可以單獨繪制某一個

name1 = '對照組'
t1 = np.array([1, 2, 3, 4, 5, 6, 7, 8])
N1 = np.array([0.5, 8, 17, 269, 690, 816, 1582, 1316])
K1 = 1322

name2 = 'ph = 6'
t2 = np.array([1, 2, 3, 4, 5, 6, 7, 8])
N2 = np.array([0.5, 8, 27, 194, 500, 670, 759, 654])
K2 = 694

name3 = 'ph = 8'
t3 = np.array([1, 2, 3, 4, 5, 6, 7, 8])
N3 = np.array([0.5, 12, 47, 424, 516, 468, 734, 910])
K3 = 846

最最最困難的地方埠忘,沒有沒有現(xiàn)成的函數(shù),需要自己定義一個:

我們希望這個函數(shù)能利用五個參數(shù)(t時間, N種群數(shù)量, K環(huán)境承載力, name組別, color顏色)馒索,實現(xiàn)后三個目標:

1.反解參數(shù)r
2.畫變換后數(shù)據(jù)的擬合直線
3.依據(jù)參數(shù)畫邏輯斯蒂曲線

stats.linregress可以反解我們需要的值莹妒,返回五個參數(shù),分別是斜率绰上、截距旨怠、相關系數(shù)、p值蜈块、斜率的標準誤差(此處用不到p值鉴腻,會發(fā)現(xiàn)p值全為零);
matplotlib.pyplot簡稱plt下有各種函數(shù)可供使用百揭,subplot為子圖分區(qū)爽哎、plot繪圖、scatter標注數(shù)據(jù)點信峻、xlabel和ylabel標注坐標軸倦青、title賦予圖片標題

def logistic_fit(t, N, K, name, color):
    # 反解參數(shù)
    slope, intercept, r_value, p_value, std_err = stats.linregress(t, np.log(abs(K - N) / N))
    r = -slope
    a = intercept
    t_fit = np.linspace(min(t), max(t), 1000)
    N_fit = K / (1 + np.exp(-r * t_fit + a))

    print(f"{name}的內(nèi)稟增長率是{"%.3f" % r}")
    print(f"{name}的截距是{"%.3f" % intercept}")

    plt.subplot(1, 2, 1)                        
    plt.plot(t, slope * t + intercept, color=color, label=name)
    plt.scatter(t, np.log(abs(K - N) / N), label=name, color=color)
    plt.xlabel('培養(yǎng)時間(天)')
    plt.ylabel('變換后數(shù)據(jù):log((K - N) / N)')
    plt.title('變換后數(shù)據(jù)的線性回歸')
    plt.legend()
    
    plt.subplot(1, 2, 2)                        
    plt.plot(t_fit, N_fit, color=color, label=name)
    plt.scatter(t, N, label=name, color=color)
    plt.xlabel('培養(yǎng)時間(天)')
    plt.ylabel('種群密度(單位:只/ml)')
    plt.title('邏輯斯蒂回歸曲線')
    plt.legend()

    return t_fit, N_fit, slope, intercept

函數(shù)封裝好后,調(diào)用函數(shù)就好啦

t_fit1, N_fit1, slope1, intercept1 = logistic_fit(t1, N1, K1, name1, 'red')
t_fit2, N_fit2, slope2, intercept2 = logistic_fit(t2, N2, K2, name2, 'green')
t_fit3, N_fit3, slope3, intercept3 = logistic_fit(t3, N3, K3, name3, 'blue')

還有一件事盹舞!如果在函數(shù)中寫plt.show()就會導致所有圖片不在同一圖層产镐,而且是一張一張顯示,只需要把它拿開踢步,最后再進行統(tǒng)一的繪圖就可以了

plt.show()
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末癣亚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子获印,更是在濱河造成了極大的恐慌述雾,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兼丰,死亡現(xiàn)場離奇詭異玻孟,居然都是意外死亡,警方通過查閱死者的電腦和手機鳍征,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門黍翎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人艳丛,你說我怎么就攤上這事匣掸√宋桑” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵碰酝,是天一觀的道長霎匈。 經(jīng)常有香客問我,道長送爸,這世上最難降的妖魔是什么铛嘱? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮碱璃,結(jié)果婚禮上弄痹,老公的妹妹穿的比我還像新娘。我一直安慰自己嵌器,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布谐丢。 她就那樣靜靜地躺著爽航,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乾忱。 梳的紋絲不亂的頭發(fā)上讥珍,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音窄瘟,去河邊找鬼衷佃。 笑死,一個胖子當著我的面吹牛蹄葱,可吹牛的內(nèi)容都是我干的氏义。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼图云,長吁一口氣:“原來是場噩夢啊……” “哼惯悠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起竣况,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤克婶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后丹泉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體情萤,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年摹恨,在試婚紗的時候發(fā)現(xiàn)自己被綠了筋岛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡睬塌,死狀恐怖泉蝌,靈堂內(nèi)的尸體忽然破棺而出歇万,到底是詐尸還是另有隱情,我是刑警寧澤勋陪,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布贪磺,位于F島的核電站,受9級特大地震影響诅愚,放射性物質(zhì)發(fā)生泄漏寒锚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一违孝、第九天 我趴在偏房一處隱蔽的房頂上張望刹前。 院中可真熱鬧,春花似錦雌桑、人聲如沸喇喉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拣技。三九已至,卻和暖如春耍目,著一層夾襖步出監(jiān)牢的瞬間膏斤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工邪驮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留莫辨,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓毅访,卻偏偏與公主長得像沮榜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子俺抽,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容