如果我有一个随时间演变的一维系统的数据,本质上是一个二维数组,并且每个时间点的数组大小相同,我将如何产生这样的东西:
(取自图灵的生物模式形成模型和Maini 等人的鲁棒性问题,2012)
我试图通过根据域的增长及时调整(或者更确切地说合成)每个实例的大小到特定长度的数组,并用 NaN 填充数组的其余部分来使用matplotlib复制这一点。
import numpy as np
import matplotlib.pyplot as plt
N = 750
x = []
t = np.linspace(0, N, N)
def asize(i, N): # Computes the necessary size of the array
return int(N*np.exp(2*(i-N)/N))
for i in range(N): # Concatenating data with whitespace
x.append(np.concatenate((np.sin(np.linspace(0,3*np.pi,asize(i,N)))**2,
np.NaN*np.zeros(N-asize(i,N)))))
x = np.transpose(np.array(x))
plt.imshow(x, cmap = 'Spectral_r', origin = 'lower')
plt.plot(t, N*np.exp(2*(t-N)/N), c='white', lw = 2) # Making the boundary smoother
plt.axis([0,N,0,N])
plt.xlabel('$t$')
plt.ylabel('$x$')
plt.xticks([0,250,500,750])
plt.yticks([0,250,500,750])
plt.show()
自然,对于实际数据,这种方法会更加乏味,需要以某种方式压缩数组。使用 matplotlib、Mathematica 或任何其他工具是否有更合理的方法?