【问题标题】:Plotting on Gnuplot - skipping lines在 Gnuplot 上绘图 - 跳线
【发布时间】:2013-04-27 05:57:17
【问题描述】:

我在 Gnuplot 中读取文件时遇到了一些问题。 例如,我有一个这样的文件:

___________________________________________
'#current' 
month followed retweeted mentioned replied 

Jan 395 29 35 28 

Feb 380 28 32 31 

'#previous' 
month followed retweeted mentioned replied 

Jan 381 30 38 32 

Feb 378 25 42 30 

Mar 374 28 46 40
______________________________________________________

我只需要读取以标签“#previous”开头的第二个块。我该怎么做?我试过这个命令:

plot "data.txt" index 'previous' using 3:xticlabel(1) axes x1y1 with lines linecolor rgbcolor "red",\

但它不起作用。有什么想法吗?

【问题讨论】:

  • 如果您在 linux 下工作,您可以过滤 '#previous' 后面的任何内容,然后使用特定的配置文件将其通过管道传输到 gnuplot,该配置文件将考虑您的数据格式。请记住,在这种情况下,您可能想告诉 gnuplot 您的日期格式。
  • 是的,我在 Linux 下工作,但我才刚刚开始,所以这对我来说相当困难。你能写出我应该用于绘图的线吗?
  • 看看这个谷歌搜索:goo.gl/6zaiO第一个链接来自堆栈溢出stackoverflow.com/questions/7103531/…你使用它并管道到 gnuplot
  • 这真的是数据格式吗? (例如,'#previous' 周围是否真的有引号和记录之间的空白行?)。如果是这样,那就更具挑战性了(这绝对不是标准的 gnuplot 格式)
  • “但它不起作用”——什么失败了?而且,您使用的是哪个版本的 gnuplot?

标签: gnuplot


【解决方案1】:

查看这个问题的答案

Gnuplot: Plotting several datasets with titles from one file

我认为你需要像这样在索引之后添加一个 1

使用 3:xticlabel(1) 轴 x1y1 绘制“data.txt”索引 1 线条 linecolor rgbcolor “red”

编辑: 数据集的索引为 0,因此第一个块的索引为 0,第二个块(前一个)的索引为 1。您提到的有关坏行的错误表明我们的数据文件格式存在问题。 在这些链接上阅读数据格式 http://www.gnuplotting.org/plotting-data/ http://lowrank.net/gnuplot/datafile2-e.html

【讨论】:

  • 但是为什么在“index”之后使用“1”呢?如何指定我的“上一个”标签?我试过 plot "data.txt" i 0 t "previous" using 3:xticlabel(1) axes x1y1 with lines linecolor rgbcolor red,但它说3行中有错误数据..
  • 较新版本的 gnuplot 应该接受一个字符串作为索引。
【解决方案2】:

让我们把所有东西放在一起:

按照this链接,您可以了解如何过滤文件(这样您就可以在特定行之后获取所有内容)

所以在我们的例子中:

sed -e '1,/previous/d' data.txt > gnuplot some_gnuplot_options

我是从我的 windows 开发机器上写的,所以无法验证,但这应该让你知道如何做到这一点。

我还建议定义您提供给 gnuplot 的 gnuplot 配置文件。只需创建 settings.pg 并在其中放置类似的内容(这是我为自己完成的一些工作的示例,因此不适用于您的数据格式):

set terminal png size 1024, 360
set output "load.png"
set datafile separator "\t"
set timefmt "%Y-%m-%d %H:%M:%S"
set xdata time
set format x "%m/%d\n%H:%M"
set xrange["2012-04-29 11:00:00":"2012-05-01 11:58:00"] noreverse nowriteback
set autoscale y
set grid
set key left box
plot "chart.txt" using 1:2 t 'column_1' with lines, "chart.txt" using 1:3 t 'column_2' with lines

那么您的 gnuplot 调用将如下所示:

sed -e '1,/previous/d' data.txt > gnuplot your_pg_file.pg

您还需要检查 gnuplot 手册 here 中的时间格式。


编辑:

如果那是你的大学作业,你不应该在这里发布你的问题 :-) 我不想无聊之类的,但是你在研究文档并尝试不同的事情之后找到你的解决方案不是作业的目标吗? :-)

【讨论】:

  • 我不能使用任何像“sed”这样的Linux命令,因为在我必须将解决方案上传到大学服务器并且解决方案将被测试之后。它必须只包含 Gnuplot 命令。
  • 'm 伊拉斯谟学生和这门学科的老师并不关心我们怎么做。他没有给我们任何文件或其他东西,只是告诉“使用谷歌”,仅此而已。我在谷歌上搜索了 2 天的解决方案,但我还没有找到好的解决方案..
  • 但是我们离开google 时代:-) 你可以在那里找到你的文档,不是吗?好吧,我不是在评判你——你做作业的方式是你的事。
  • FWIW——你的管道放错了地方。 Gnuplot 永远不会看到数据,因为您没有告诉它读取任何内容。最好在绘图命令中内联管道:plot '< sed -e ... data.txt' using 1:2 ...
  • 我无法测试它,所以你可能是对的。我会将它更新为另一种我可能会工作的形式。谢谢。
猜你喜欢
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多