【问题标题】:Loading column from CSV file as a list assigned to a variable从 CSV 文件加载列作为分配给变量的列表
【发布时间】:2015-10-25 11:07:24
【问题描述】:

given 是 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]

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

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

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

【问题讨论】:

  • 我不明白你在做什么:你想使用所有可能的 [a,b] 组合来评估一个函数 f(a, b,x,y) 对 a、b、x 和 y 的函数依赖,您已经知道或者您想以某种方式使用从文件加载的 a、b 值参数化所述函数?
  • 最后一点。并感谢您的解决方案。这正是我一直在寻找的。特别感谢您提供了一个仅 gnuplot 的变体。花了一些时间来理解它,但现在我终于明白了它是如何工作的。 :-) @Brian Tompsett,感谢您的编辑! :-)

标签: csv gnuplot


【解决方案1】:

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

1 4
2 5
3 6

您可以使用awk 系统调用轻松地将第一和第二列值加载到变量ab(您也可以使用带有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)

这是一个仅 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)

【讨论】:

  • 关于数据文件中值的使用的最后一个问题:这里它采用 a 和 b 的所有组合(为什么我们有 3 个数据行,9 个图表)。有没有办法只使用 a 和 b 成对,...这样我们得到一个图 a=1 和 b=4,另一个图 a=2 和 b=5,最后一个图 a=3 和 b =6?
  • @Daniyal 是的,如果你有 3 个元组,你可以做splot ... for [i=1:3] f(word(a,i), word(b,i), x, y)word(a,i) 选择字符串a 中占据位置i 的单词。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 2018-06-06
  • 1970-01-01
  • 2019-07-06
  • 2019-05-04
  • 1970-01-01
相关资源
最近更新 更多