将python中的数组绘制到特定元素中

时间:2016-05-06 08:21:21

标签: python arrays numpy matplotlib

我有一个这样的数据文件:

0.001  5.515e-01  1.056e+00  1.384e-01  1.273e+01  -1.808e-01  1.255e+01
0.002  2.335e-02  -1.100e-03  -8.850e-03  1.273e+01  -3.176e-01  1.241e+01
0.003  2.335e-02  -1.100e-03  -8.850e-03  1.273e+01  -3.177e-01  1.241e+01
0.004  2.335e-02  -1.101e-03  -8.851e-03  1.273e+01  -3.177e-01  1.241e+01
0.005  2.335e-02  -1.101e-03  -8.851e-03  1.273e+01  -3.177e-01  1.241e+01
0.006  2.335e-02  -1.102e-03  -8.851e-03  1.273e+01  -3.177e-01  1.241e+01
0.007  2.335e-02  -1.102e-03  -8.852e-03  1.273e+01  -3.177e-01  1.241e+01
...    ...          ...         ...        ...         ...        ...

第一列是时间,最后一列是总能量,第二列是势能,第三列是动能。现在我想把这些能量绘制成时间的函数,但我不想一次性绘制整个数组。

相反,我希望选择一个时间并将能量绘制到那个时间,然后再次选择另一个时间并将能量绘制到那个时间(始终从t = 0开始)。我为此编写的代码如下:

from pylab import*
from numpy import*

data=loadtxt('500.txt')

t=data[:,0]
KE=data[:,-3]
PE=data[:,-2]
TE=data[:,-1]

t=0
while t<100:
    ke=KE[:t]
    time=t[:t]
    plot(time,ke)
    picname=temp+'e.png'
    savefig(picname)
    show()
    t=t+40

但它会返回File "energyprofile.py", line 14, in <module> time=t[:t] TypeError: 'int' object has no attribute '__getitem__'。我怎样才能解决这个问题呢?

2 个答案:

答案 0 :(得分:0)

slicing notation for python

中没有逗号

这里:

t=data[:,0]
KE=data[:,-3]
PE=data[:,-2]
TE=data[:,-1]

必须替换为:

t=data[:0]
KE=data[:-3]
PE=data[:-2]
TE=data[:-1]

答案 1 :(得分:0)

问题在于循环变量名称。已有一个名为t的数组。

t=data[:,0]

因此,当在数组t内调用数组索引t时,

time=t[:t]

它返回错误。更改变量名称时,问题将被删除:

t1=0
while t1<100:
    ke=KE[:t1]
    time=t[:t1]
    plot(time,ke)
    picname=str(t1)+'e.png'
    savefig(picname)
    show()
    t=t+40