【问题标题】:how can I recreate these graphs?如何重新创建这些图表?
【发布时间】:2015-12-09 14:03:57
【问题描述】:

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

我需要以正确的顺序排列它们,而且我也不确定每个图表需要使用哪些 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()

【问题讨论】:

    标签: python-3.x matplotlib graph


    【解决方案1】:

    首先,您的 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

    第三,我用不同的线型绘制了不同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)
    

    4,加上3,原图中的红色区域得到如下:保持激活曲线不变,改变失活曲线k的值,使失活曲线和激活曲线至少相交(因此双稳态是可能的)。将有一组k 的上限和下限以使拦截成为可能,红色区域说明了k 的界限(我想必须以数字方式解决k 的上限和下限)。

    【讨论】:

      猜你喜欢
      • 2012-12-11
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 2013-02-03
      相关资源
      最近更新 更多