簡體   English   中英

如何得到plot之后的數據點呢? (Python)

[英]How to get data points after plot it? (Python)

我只是用 scipy.odeint 來求解 diff_equation 系統,並使用 matplotlib 到 plot 它。 我得到了圖表。 我的問題是我可以得到一些特定的數據點,比如當 t = 1 時,x1、x2、x3 是多少。 我需要當 t = 1,2,3,4... 時,濃度值是多少。 謝謝你。

import matplotlib.pyplot as plt
from scipy.integrate import odeint
Dose = 100
V = 43.8
k12 = 1.2 # rate of central -> peripheral
k21 = 1.4 # rate of peripheral -> central
kel = 0.20 # rate of excrete from plasma
def diff(d_list, t):
    x1, x2, x3, = d_list
    # X1(t), X2(t), X3(t)
    return np.array([(-k12*x1-kel*x1+k21*x2),
                     (k12*x1-k21*x2),
                     (kel*x1)])
t = np.linspace(0, 24, 960)
result = odeint(diff, [(Dose/V), 0, 0], t)
plt.plot(t, result[:, 0], label='x1: central')
plt.plot(t, result[:, 1], label='x2: tissue')
plt.plot(t, result[:, 2], label='x3: excreted')
plt.legend()
plt.xlabel('t (hr)')
plt.ylabel('Concentration (mg/L)')
plt.show()

這與 matplotlib 或 scipy 無關。您可以插值或獲取最近的數據點。

插值

如果您需要獲取不對應於數據點的t值的x1x2x3 (您提到的 1,2,3,4 不在您的t數組中),您將需要進行插值。 要在t=1處獲取x1x2x3 ,您可以這樣做(在腳本末尾):

valuesAt1 = [np.interp(1, t, result[:,col]) for col in range(result.shape[1])]

print(valuesAt1)的 output 則為:

[1.1059703843218311, 0.8813129004034452, 0.2958217381057726]

如果你只需要x1 ,就做

valuesAt1 = np.interp(1, t, result[:,0])

然后, output 的print(valuesAt1)是:

1.1059703843218311

最近的數據點

如果您不想進行插值,但想要x1x2x3的值作為最接近 1 的t數組元素的值,請執行以下操作:

valuesAtClosestPointFrom1 = result[ np.argmin(np.abs(t-1))]

來自print(valuesAtClosestPointFrom1)的 output 是:

[1.10563546 0.88141641 0.29605315]

這可以通過插值和使用scipy.interpolate.InterpolatedUnivariateSpline來完成,如下所示:

from scipy.interpolate import InterpolatedUnivariateSpline

splx1 = InterpolatedUnivariateSpline(t, result[:,0])
splx2 = InterpolatedUnivariateSpline(t, result[:,1])
splx3 = InterpolatedUnivariateSpline(t, result[:,2])

首先,您需要傳遞要插值的 x 和 y 數據。 其次,為 x 創建一個列表,您需要為其獲取所需的 y 值。

import numpy as np

desired_time = np.arange(1,25)

x1 = splx1(desired_time)
x2 = splx2(desired_time)
x3 = splx3(desired_time)

最后,將其傳遞給相應的樣條 object 以獲得所需的值。 例如,使用np.arange創建一個從124desired_time數組,並將其傳遞給上例中的樣條對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM