Gnuplot 如何从一组样本数据中绘制多个图表?

Gnuplot 如何从一组样本数据中绘制多个图表?,gnuplot,Gnuplot,我有一个数据集,我想从中生成一组绘图,但我很难做到这一点 我有一个包含以下列的数据集: 时间(ISO-8601格式的时间戳YYYY-MM-DDTHH:MM:ss.sssZ) 客户端(客户端的主机名;数据集中有两个不同的客户端) 服务器(服务器的主机名;数据集中有八个不同的服务器) 两个相关的统计数据,A1和A2 其他两个相关的统计数据,B1和B2 给定的时间戳中通常只有一个样本。数据集中大约有7000行。一些示例行如下所示: time | client |

我有一个数据集,我想从中生成一组绘图,但我很难做到这一点

我有一个包含以下列的数据集:

  • 时间(ISO-8601格式的时间戳
    YYYY-MM-DDTHH:MM:ss.sssZ
  • 客户端(客户端的主机名;数据集中有两个不同的客户端)
  • 服务器(服务器的主机名;数据集中有八个不同的服务器)
  • 两个相关的统计数据,A1和A2
  • 其他两个相关的统计数据,B1和B2
给定的时间戳中通常只有一个样本。数据集中大约有7000行。一些示例行如下所示:

time                | client   | server   | stat A1 | stat A2 | stat B1 | stat B2
--------------------+----------+----------+---------+---------+---------+--------
2015-04-01T03:47:12 | client-x | server-1 | 12.2    | 20.0    |  2.3    |  7.0
2015-04-01T03:49:09 | client-y | server-6 | 15.0    | 25.2    | 10.0    | 15.2
我想生成四个图,作为折线图,一个用于相关统计数据和客户机的每个组合

  • 客户机-x和统计数据A1和A2
  • 客户端x和统计B1和B2
  • 客户-y和统计数据A1和A2
  • 客户-y和统计B1和B2

  • 在这一点上,我们完全不知道如何使用gnuplot实现这一点。我对生成绘图的其他选项持开放态度,但当我获得新的/更新的数据集时,它需要可编写脚本。

    为了获得线图,必须在gnuplot之外进行数据过滤,例如使用
    awk

    首先使用设置时间格式

    set xdata time
    set timefmt '%Y-%m-%dT%H:%M:%S'
    
    然后提取所有可能的客户端名称,除非您已经知道可能的客户端名称:

    clients = system("awk '!/^#/ { print $2 }' test.dat | sort | uniq")
    
    然后使用
    multiplot

    set style data lines
    set multiplot layout 2,2
    
    do for [client in clients] {
        set title sprintf("client '%s'", client)
        plot sprintf('< grep ''\b%s\b'' test.dat', client) using 1:4 title "A1", '' using 1:5 title "A2"
        plot sprintf('< grep ''\b%s\b'' test.dat', client) using 1:6 title "B1", '' using 1:7 title "B2"
    }
    unset multiplot
    
    设置样式数据行
    设置多点布局2,2
    为[客户中的客户]执行{
    设置标题sprintf(“客户端“%s”,客户端)
    使用1:4标题“A1”打印sprintf(“
    这个问题很类似于