从具有 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')
结果:
我一直在尝试分析 .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')
结果: