我该如何重新创建这些图表?

时间:2015-12-09 14:03:58

标签: python-3.x matplotlib graph

我希望重新创建this link中显示的这些图表:

enter image description here

我需要按正确的顺序排列它们,我也不确定每个图形需要使用的k值。 我已经尝试了几个k值,但似乎无法使其正确。我的代码如下所示。 任何帮助都会很棒,谢谢。

#define parameters
k1= np.linspace(0,1,2)
k2=1
n1=3
n2=3
K1=0.3
K2=0.3
beta1=0
beta2=0.05
x = np.linspace(0,1)
def r_inact_1loop(x,k1=1):      #np.linspace(10,0,0.5)): #k1=1
    return k1*x
def r_activation(x,k1=1):     #np.linspace(0,1,2.5))
    return k2*(beta2*K2**n2/(K2**n2+x**n2) + x**n2/(K2**n2+x**n2))*(1-x)
def r_inact_2loop(x,k1=1):   #np.linspace(2.5,0,1)):
    return k1*(beta1*x**n1/(K1**n1+x**n1) + K1**n1/(K1**n1+x**n1))*x

#graphs
fig = plt.figure(figsize=(16,5))

ax1 = fig.add_subplot(1,3,1)
ax2 = fig.add_subplot(1,3,2)
ax3 = fig.add_subplot(1,3,3)
ax1.set_xlabel('Fraction of activated A')
ax2.set_xlabel('Fraction of activated A')
ax3.set_xlabel('Fraction of activated A')
ax1.set_ylabel('Rate of A inactivation or activation')
ax2.set_ylabel('Rate of A inactivation or activation')
ax3.set_ylabel('Rate of A inactivation or activation')

for k in k1: #k1
    ax1.plot(x, r_inact_1loop(x,k),label='in1 k1={:.1f}'.format(k))
    ax1.plot(x, r_activation(x,k),label='ac k1={:.1f}'.format(k))
    #ax1.legend(loc='best')
    ax2.plot(x, r_inact_1loop(x,k),label='in1 k1={:.1f}'.format(k))
    ax2.plot(x, r_inact_2loop(x,k),label='in2 k1={:.1f}'.format(k))
    #ax2.legend(loc='best')
    ax3.plot(x, r_activation(x,k),label='ac k1={:.1f}'.format(k))
    ax3.plot(x, r_inact_2loop(x,k),label='in2 k1={:.1f}'.format(k))
    #ax3.legend(loc='best')
    plt.xlim(0,1)
    plt.ylim(0,0.7)
plt.show()

1 个答案:

答案 0 :(得分:0)

首先,您的r_activation功能对我来说似乎不对:

def r_activation(x,k1=1):     #np.linspace(0,1,2.5))
    return k2*(beta2*K2**n2/(K2**n2+x**n2) + x**n2/(K2**n2+x**n2))*(1-x)

未使用参数k1

第二,对于第一个图,激活曲线可以由r_inact_1loop函数生成,1-x作为第一个参数而不是x

第3,我用不同的线型绘制了不同k的激活/失活曲线,以说明不同k的影响。

k=1
ax1.plot(x, r_inact_1loop(x,k),label='in1 k1={:.1f}'.format(k), c='r')
ax1.plot(x, r_inact_1loop((1-x),k),label='ac k1={:.1f}'.format(k), c='b')
ax1.plot(x, r_inact_1loop((1-x),k*0.5),label='ac k1={:.1f}'.format(k), c='b', ls='--')
#ax1.plot(x, r_activation(x,k),label='ac k1={:.1f}'.format(k))
#ax1.legend(loc='best')
ax2.plot(x, r_inact_1loop(x,k),label='in1 k1={:.1f}'.format(k), c='r')
ax2.plot(x, r_activation(x,k),label='ac k1={:.1f}'.format(k), c='b')
#ax2.plot(x, r_inact_2loop(x,k),label='in2 k1={:.1f}'.format(k))
#ax2.legend(loc='best')
ax3.plot(x, r_inact_2loop(x,k),label='in2 k1={:.1f}'.format(k), c='r')
ax3.plot(x, r_inact_2loop(x,k*2),label='in2 k1={:.1f}'.format(k), c='r', ls='--')
ax3.plot(x, r_activation(x,k),label='ac k1={:.1f}'.format(k), c='b')
#ax3.legend(loc='best')
plt.xlim(0,1)
plt.ylim(0,1)

enter image description here

第4次,说第3次,原始图中的红色区域如下获得:保持激活曲线不变,并改变失活曲线的k值,使得失活曲线和激活曲线至少拦截(因此可以双稳态)。将有一组上限和下限k以使拦截成为可能,红色区域显示k边界(我想我必须在数字上解决{{1}的上限和下限}})。