[英]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
值的x1
、 x2
和x3
(您提到的 1,2,3,4 不在您的t
數組中),您將需要進行插值。 要在t=1
處獲取x1
、 x2
和x3
,您可以這樣做(在腳本末尾):
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
最近的數據點
如果您不想進行插值,但想要x1
、 x2
和x3
的值作為最接近 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
創建一個從1
到24
的desired_time
數組,並將其傳遞給上例中的樣條對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.