将CSV文件中的列作为分配给变量的列表加载

时间:2015-10-25 11:07:24

标签: csv gnuplot

给出的是gnuplot中的函数f(a,b,x,y),其中我们得到了一个带有x,y,z的3D空间(使用splot)。

还给出了以下结构的csv文件(没有任何标题):

2  4
1  9
6  7
... 

有没有办法读出第一列的所有值并将它们分配给变量a?隐含地它应该创建类似的东西:

a = [2,1,6]
b = [4,9,7]

这个想法是绘制迭代所有a,b元组的函数f(a,b,x,y)。

我已经阅读了其他帖子,我希望这些帖子与其相关,例如Reading dataset value into a gnuplot variable (start of X series)。但是我无法做任何进展。

有没有办法遍历带有两列的csv文件的所有行,使用行的每个列值作为函数的参数?

1 个答案:

答案 0 :(得分:1)

假设您有以下名为data的数据文件:

1 4
2 5
3 6

您可以使用a系统调用轻松地将第1和第2列值加载到变量bawk(您也可以使用gnuplot使用plot预处理来执行此操作但这样的方式更复杂):

a=system("awk '{print $1}' data")
b=system("awk '{print $2}' data")
f(a,b,x,y)=a*x+b*y # Example function
set yrange [-1:1]
set xrange [-1:1]
splot for [i in a] for [j in b] f(i,j,x,y)

enter image description here

这是一个仅限gnuplot的解决方案,无需系统调用:

a=""
b=""
splot "data" u (a=sprintf(" %s %f", a, $1), b=sprintf(" %s %f", b, \
$2)):(1/0):(1/0) not, for [i in a] for [j in b] f(i,j,x,y)