将数据集合在一起+图例

时间:2013-11-04 03:01:28

标签: colors gnuplot grouping legend

我不熟悉我正在尝试做的术语(这使得很难找到解决方案),但我认为你可以从输入文件中找出我想要做的事情。输入文件是.txt,它是制表符分隔的。

#input file begins here

21  00  0.005   12.0    0.006621    0.35365 0.16718
22  00  0.005   14.0    0.00662 0.34899 0.17206
23  00  0.005   16.0    0.006645    0.34523 0.17739
24  00  0.005   18.0    0.006696    0.33956 0.1815
25  00  0.005   20.0    0.006755    0.33477 0.18692
26  00  0.005   22.0    0.006797    0.33084 0.19178
27  00  0.005   24.0    0.006892    0.3265  0.19683
28  00  0.005   26.0    0.006965    0.32093 0.20256
29  00  0.005   28.0    0.007072    0.31631 0.20747

31  00  0.007   12.0    0.006158    0.38969 0.12999
32  00  0.007   14.0    0.006124    0.38578 0.13541
33  00  0.007   16.0    0.006136    0.38161 0.14018
34  00  0.007   18.0    0.006147    0.37697 0.1452
35  00  0.007   20.0    0.006193    0.37356 0.14999
36  00  0.007   22.0    0.006238    0.3673  0.15499
37  00  0.007   24.0    0.006276    0.36387 0.16037
38  00  0.007   26.0    0.00634 0.35855 0.16595
39  00  0.007   28.0    0.006417    0.35388 0.17118
40  00  0.007   30.0    0.006497    0.34844 0.17673

我想在图表上区分这两个数据块。该图将是2D图,顶部块的点为红色,底部块的点为蓝色。总输入文件大约1000行,具有不同的垂直长度;但是,它们都用换行符(\ n)进行了适当的分隔。

我正在绘制第4列和第6列,数据集名称(a.k.a.图例标签)为第3列。

1 个答案:

答案 0 :(得分:0)

以下是解决不同观点的方法:

  1. 您的输入文件确实包含两个数据块,可以使用every进行选择以进行绘图:every :::0::0仅选择第一个块,请参阅文档或help every

  2. 要使用红线颜色,只需使用例如

    plot 'file.txt' linecolor rgb 'red'
    
  3. 要选择第4列和第6列进行绘图,请使用using 4:6

  4. 使用第三列的值作为键标签并不简单。如果您知道它是一个数值,那么您可以使用stats命令提取这些单个值(请参阅例如Gnuplot: How to load and display single numeric value from data file):

    stats 'file.txt' using 3 every :::0::0 nooutput
    key1 = sprintf('%.3f', STATS_max)
    stats 'file.txt' using 3 every :::1::1 nooutput
    key2 = sprintf('%.3f', STATS_max)
    

    如果列也可以包含其他值,或者您希望保持相同的格式,则需要外部工具来提取标题的值:

    key1 = system('head -1 file.txt | cut -f 3')
    key2 = system('tail -1 file.txt | cut -f 3')
    
  5. 所以,你的脚本可能如下所示:

    stats 'file.txt' using 3 every :::0::0 nooutput
    key1 = sprintf('%.3f', STATS_max)
    stats 'file.txt' using 3 every :::1::1 nooutput
    key2 = sprintf('%.3f', STATS_max)
    
    plot 'file.txt' using 4:6 every :::0::0 linecolor rgb 'red' title key1,\
         ''         using 4:6 every :::1::1 linecolor rgb 'blue' title key2