如何在csv中绘制所有单行中的每个第n个数据点

时间:2015-02-13 15:05:08

标签: gnuplot

我的任务是绘制一个显然厌恶新行/列的人生成的一些数据。

我有一个文件格式如下:

I0,X0,Y0,I1,X1,Y2,I2,X2,Y2,I3,X3,Y3,...中,XN,YN

我需要绘制i与y的关系。

我遇到过"每一个"命令,但似乎是用于跳过包含列的数据中的行。

我在Windows 7上运行gnuplot 4.6。这只能在gnuplot中完成吗?如果不是,插入新行字符的最佳方法是什么。我可以跳上一个Linux机器但是这样做但它没有gnuplot可用。无论哪种方式,我更喜欢一个自包含的plt文件,因为这将再次出现。

1 个答案:

答案 0 :(得分:1)

是的,您可以绘制这些数据,但这需要一些技巧,因为gnuplot通常会逐行读取数据。

您必须使用matrix读取数据,保存每第三列的值,从第0列开始,然后在读入y值时将此保存的值用作x值(列号为模数) 3 == 2):

set datafile separator ','
x = 0
plot 'test.dat' matrix using (int($1) % 3 == 0 ? x = $3 : x = x, (int($1) % 3 == 2 ? x : 1/0)):(int($1) % 3 == 2 ? $3 : 1/0) w lp ps 2 pt 7 

使用测试数据

0.1,2,3,0.2,5,6,0.4,8,9,0.8,11,12,1.6,14,15,3.2,17,18

我得到了情节

enter image description here

请注意,您只能使用gnuplot 5.0版获得一个折线图。使用4.6时,1/0会导致线条被中断,而您只能看到点。

对于以前的版本,您必须首先将数据绘制到中间文件,然后使用传统的绘图命令再次绘制:

set datafile separator ','
x = 0
set table 'test.tab'
plot 'test.dat' matrix using (int($1) % 3 == 0 ? x = $3 : x = x, (int($1) % 3 == 2 ? x : 1/0)):(int($1) % 3 == 2 ? $3 : 1/0) w lp ps 2 pt 7 
unset table

set datafile separator white
plot 'test.tab' using 1:2 every 3::2 w lp ps 2 pt 7