【问题标题】:plot directly done with gnuplot and input data using a pipe使用 gnuplot 直接绘制并使用管道输入数据
【发布时间】:2017-08-21 02:54:51
【问题描述】:

我有直接从 Bash 生成的输入(代表 y=x^2

for((i=0;i<10;i++)); do printf "%3d %3d\n" $((i)) $((i*i)); done

我想用 gnuplot 绘制这些输入数据,并尽可能使用管道。

我试图天真地做:

for((i=0;i<100;i++)); do printf "%3d %3d\n" $((i)) $((i*i)); done < gnuplot -e "plot u 1:2 w l"

但这行不通,因为我 printf sequentially 的值 (i,i^2)

我尝试使用echo -e(在gnuplot重定向“&lt;”之前):

echo -e $(for((i=0;i&lt;100;i++)); do printf "%3d %3d\n" $((i)) $((i*i)); done )

在上面的命令 (for loop) 上找到一种方法来存储 2 个完整的值列,然后将它们传递给 gnuplot 命令,但是使用这个解决方案,我不会产生 2 列(我只得到一行数据)。

有人可以帮助我使用管道(即只有一个命令行)用 gnuplot 绘制生成的数据

感谢您的帮助

【问题讨论】:

  • 您想将数据作为列发送吗?不清楚你想如何发送它,你能用一个合适的例子来展示它吗?
  • 我想绘制由我的 for 循环 生成的数据并将它们直接通过管道传输到 gnuplot(如果可能的话)。我的问题是我不能像标准 dat 文件那样存储这个数据流(即使用 gnuplot 的经典方式)。

标签: bash gnuplot


【解决方案1】:

您必须使用for ... | gnuplot -e ... 将数据通过管道传输到gnuplot,并且您必须使用plot '-' 告诉gnuplot 从标准输入中读取:

for((i=0;i<100;i++)); do printf "%3d %3d\n" $((i)) $((i*i)); done | gnuplot -e "set terminal pngcairo; set output 'blubb.png'; plot '-' u 1:2 w l"

【讨论】:

  • @youpilat13:请注意,Gnuplot 也支持数据操作,例如,您可以实现类似的结果:seq 100 | gnuplot -p -e 'plot "-" u 1:($1**2) w l'
猜你喜欢
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多