首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从一组样本数据中绘制几张图表?

如何从一组样本数据中绘制几张图表?
EN

Stack Overflow用户
提问于 2015-04-29 00:53:27
回答 1查看 102关注 0票数 2

我有一个数据集,我想从它生成一组地块,而且我很难让gnuplot来完成它。

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

  • 时间(时间戳采用ISO-8601格式YYYY-MM-DDTHH:mm:ss.sssZ)
  • 客户端(客户端的主机名;数据集中的两个不同的客户机)
  • 服务器(服务器的主机名;数据集中的八个不同的服务器)
  • 两个相关的统计数据,A1和A2
  • 另外两个相关的统计数据,B1和B2

给定的时间戳通常只有一个样本。数据集中大约有7000行。一些示例行如下所示:

代码语言:javascript
复制
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

我想要生成四个地块,作为线图,每个相关的统计数据和客户组合一个。

  1. client-x和stats A1和A2
  2. client-x和stats B1和B2
  3. client-y和stats A1和A2
  4. client-y和stats B1和B2

此时,完全不知所措,不知道如何用gnuplot来处理这件事。我对生成绘图的其他选项持开放态度,但当我获得新的/更新的数据集时,它需要是可编写的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-29 07:29:24

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

首先设置时间格式

代码语言:javascript
复制
set xdata time
set timefmt '%Y-%m-%dT%H:%M:%S'

然后提取所有可能的客户端名称,除非您已经知道可能的客户端名称:

代码语言:javascript
复制
clients = system("awk '!/^#/ { print $2 }' test.dat | sort | uniq")

然后使用multiplot绘制数据

代码语言:javascript
复制
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

这个问题与How to use one of the column of data as legend in gnuplot?非常相似。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29932510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档