从具有 n 组 x 和 y 值的数据文件 (.dat) 进行分析和绘图 python

Analysis and plotting from a data file (.dat) with n sets of x and y values in python

我一直在尝试分析 .dat 文件中的数据。文件中的实验重复(很多)次,因此每个实验都有 n 个数据点用于 r 个实验中的每一个。例如:r = 4 个实验,每个实验中有 n = 3 个数据点:

    1     4.8
    2     3.4
    3     2.3

    1     6.5
    2     5.3
    3     4.2

    1     9.8
    2     8.4
    3     7.6

    1     13.8
    2     12.4
    3     11.6

我想读取文件并绘制 4 个图表 - 前 3 行、第二行 3 行、第三行 3 行和第四行 3 行。到目前为止我的代码是这样的:

    for line in myfile:
        if not line.strip():#takes out empty rows
            continue
        else:
            data.append(line)

    for line in data:
        x, y = line.split()
        timestep.append(float(x))
        value.append(float(y))

    z = 0.0
    j = 1 
    n = 3 #no. of data points in one experiment
    r = 4 #no. of times experiment repeats
    x = np.arange(1,n)

    for k in range(1, r):
        for i in (value):
            j += 1     
            if n%j != 0: #trying to break the loop after the first experiment of n data points
                z = i
                y_"str(j)" = [] #I want to call this array y_j, i.e. y_1 for the first loop or y_2 for the second, etc, wild index in python?! :( 
                y_"str(j)".append(z)

        else:
            value = value[steps:] #trying to remove the first three points before starting to for loop again
        plt.figure()
        plt.plot(x, y_str(j),'r', label = "y_str(j)")
        plt.title('y ' +str(j) )
        plt.show()

我会对其进行更多分析,但我很难在大数据数组中每隔 n 次执行相同的分析(绘图等)。甚至可能没有必要将我的 2 列输入数据拆分为单独的 x 和 y 列,但我在 for 循环中使用 data[i][2] 时遇到了烦人的 int 和 float 错误。

非常感谢您的帮助!

尝试做这样的事情:

for line in myfile:
    if line.strip():#takes out empty rows
        x, y = line.split()
        timestep.append(float(x))
        value.append(float(y))

n = 3 #no. of data points in one experiment
r = 4 #no. of times experiment repeats
x = np.arange(1, n+1) # you don't need to use it. just plot(y)
colors = ['r', 'b', 'g', 'k'] 
for k in range(r):
    y = value[k*n:(k+1)*n]

    # plt.subplot(r+1, 1, k+1) #if you want place it on different plots
    plt.plot(x, y, colors[k], label="%d experiment" % (k+1))

plt.legend(loc=1) # or wherever you want
plt.title('Experiments')
plt.show()

通过实验读入数据,以空行作为分隔符:

data = []
exp = [[], []]
for line in myfile:
    if line.strip():
        for index, value in enumerate(line.split()):
            exp[index].append(float(value))
    else:
        data.append(exp)
        exp = [[], []]

并将它们全部绘制在一个图中:

for number, exp in enumerate(data, 1):
    plt.plot(*exp, label='experiment {}'.format(number))
plt.legend(loc='best')
plt.title('My Experiments')

结果: