在gnuplot中,如何将来自两个不同文件的数据绘制到单个图中?

时间:2012-12-07 12:40:58

标签: gnuplot

我有两个不同的文件要在gnuplot中绘制。他们使用a)不同的分隔符b)x轴上的不同时间

因此,他们每个人分别绘制我需要传递

set datafile separator
set timefmt

我想将这两个数据强制/叠加在一个图表中,以便它们与时间对齐

我怎么能这样做?

4 个答案:

答案 0 :(得分:2)

使用 using modifier 之后的格式可以解决不同分隔符的问题,为每个文件指定不同的分隔符,例如:

plot 'file1.dat' u 1:2 '%lf,%lf'

使用逗号分隔符绘制两列文件。有关详细信息,请参阅help \ using。

我不是时间格式的专家,所以我不知道如何处理时间戳格式问题。但也许你可以使用像strftime()这样的函数。我从来没有尝试过,但在我看来它能满足你的需求。

答案 1 :(得分:0)

您是对的,每个文件需要传递set datafile separatorset timefmt一次。你可以这样做:

set terminal <whatever>
set output <whatever.wht>

set xdata time             # tell gnuplot to parse x data as time
set format x '%F'          # time format to display on plot x axis

set datafile separator ' ' # separator 1
set timefmt '%F'           # time format 1
plot 'file1'

set datafile separator ',' # separator 2
set timefmt '%s'           # time format 2
replot 'file2'

replot命令本身会重新映射上一行,如果你指定另一行要绘制,那么就像我在这里一样,它将在第一行之上。

答案 2 :(得分:0)

在我看来,你有两个选择。第一种是选择数据文件格式并将这两种数据文件分成这种格式,可能使用awk

plot '<awk "-f;" "{print $1,$2}" data1' using 1:2 w lines,\
     'data2' using 1:2 w lines

*注意,你的awk命令几乎肯定会有所不同,这只是展示了如何在内联管道中使用awk

您的第二个选择是使用multiplot显式轴对齐:

set multiplot
set xdata time
set datafile sep ';' #separator for first file
set timefmt "..."  #time format for first file
set lmargin at screen 0.9
set rmargin at screen 0.1
set tmargin at screen 0.9
set bmargin at screen 0.1
unset key
plot 'data1' u 1:2 w lines ls 1 nontitle
set key #The second plot command needs to add both "titles" to the legend/key.
set datafile sep ',' #separator for second file
set timefmt "..." #time format for second file
unset border
unset xtics
unset ytics
#unset other stuff that you set to prevent it from being plotted twice.
plot NaN w lines ls 1 title "title-for-plot-1", \
    'data1' u 1:2 w lines ls 2 title "title-for-plot-2"

只有在想要在图例中正确显示内容时才需要使用情节NaN技巧。如果你没有使用传奇,你不用担心它。

答案 3 :(得分:0)

这对我有用:

reset 
set term pngcairo
set output 'wall.png'
set xlabel "Length (meter)"
set ylabel "error (meter)"
set style line 1 lt 1 linecolor rgb "yellow" lw 10 pt 1
set style line 2 lt 1 linecolor rgb "green" lw 10 pt 1
set style line 3 lt 1 linecolor rgb "blue" lw 10 pt 1
set datafile separator ","
set key
set auto x
set xtics 1, 2, 9
set yrange [2:7]
set grid

set label "(Disabled)" at -.8, 1.8
plot  "file1.csv" using 1:2 ls 1 title "one" with lines ,\
  "file2.csv" using 1:2 ls 2 title "two" with lines ,\
  "file3.csv" using 1:2 ls 3 title "three" with lines
set output