好吧,我们最近接到一个项目,要制作一个自然选择模拟器,在给定每个等位基因对的特定生存能力的情况下,通过世代追踪等位基因的频率。我用python编写了一个程序来打印图形,它运行得很好。在
给你。在
#!/usr/bin/env python
import matplotlib.pyplot as plt
print ("Number of generations:")
n=int(input())
genp=[]
genq=[]
print ("What is p:")
p=float(input())
genp.append(p)
toap=1-p
genq.append(toap)
print ("What is w11:")
w11=float(input())
print ("What is w12:")
w12=float(input())
print ("What is w22:")
w22=float(input())
for i in range(1,n):
genp.append((genp[i-1]*(genp[i-1]*w11+genq[i-1]*w12))/(genp[i-1]*genp[i-1]*w11+2*genp[i-1]*genq[i-1]*w12+genq[i-1]*genq[i-1]*w22))
genq.append(1-genp[i])
plt.plot(range(0,n),genp,'r-',label='A')
plt.plot(range(0,n),genq,'b--',label='a')
plt.xlabel('Generations')
plt.ylabel('Allele Frequency')
plt.legend(loc='upper left')
plt.axis([0, n, -0.01, 1.01])
plt.title('p='+str(p)+' w11='+str(w11)+' w12='+str(w12)+' w22='+str(w22)+' for '+str(n)+' generations.', fontsize=14, fontweight='bold')
plt.savefig('graphP-'+str(p)+'w11-'+str(w11)+'w12-'+str(w12)+'w22-'+str(w22)+'.png')
plt.show()
现在,我决定稍微懒一点,让程序执行遍历不同的viability值的工作。在
下面是我如何修改它。在
^{pr2}$我不知道为什么,但是执行这个程序会导致错误。在
Traceback (most recent call last):
File "./iterative.py", line 30, in <module>
plt.plot(range(0,n),genp,'r-',label='A')
File "/usr/lib/python3.5/site-packages/matplotlib/pyplot.py", line 3153, in plot
ret = ax.plot(*args, **kwargs)
File "/usr/lib/python3.5/site-packages/matplotlib/__init__.py", line 1819, in inner
return func(ax, *args, **kwargs)
File "/usr/lib/python3.5/site-packages/matplotlib/axes/_axes.py", line 1382, in plot
for line in self._get_lines(*args, **kwargs):
File "/usr/lib/python3.5/site-packages/matplotlib/axes/_base.py", line 381, in _grab_next_args
for seg in self._plot_args(remaining, kwargs):
File "/usr/lib/python3.5/site-packages/matplotlib/axes/_base.py", line 359, in _plot_args
x, y = self._xy_from_xy(x, y)
File "/usr/lib/python3.5/site-packages/matplotlib/axes/_base.py", line 219, in _xy_from_xy
raise ValueError("x and y must have same first dimension")
ValueError: x and y must have same first dimension
我在stack overflow中搜索最后一个错误,发现当x和y数组中的元素数目不同时,它就会出现。但是第一个程序没有给出这个错误。在
我可能不能完全确定您在尝试什么,而且根据程序中的固定值更改用户输入可能是一个好主意,因为没有人知道您的输入参数的值。在
不过,我认为您的错误与没有正确初始化每个循环周期的genp和genq有关。在
所以我做了两个改变:
希望能解决你的问题。在
提示:跟踪错误的一种方法是使用
print len(x)
这样的命令,分析发生错误的行的x和y的实际尺寸相关问题 更多 >
编程相关推荐