如何从一组示例数据中绘制多个图表?
How can I plot several charts from a set of sample data?
我有一个数据集,我想从中生成一组图,但我无法 gnuplot 执行此操作。
我有一个包含以下列的数据集:
- 时间(ISO-8601 格式的时间戳
YYYY-MM-DDTHH:mm:ss.sssZ
)
- client(客户端的主机名;数据集中两个不同的客户端)
- 服务器(服务器的主机名;数据集中八个不同的服务器)
- 两个相关的统计数据,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
我想生成四张图表,作为折线图,每一张代表相关统计数据和客户的组合。
- client-x 和统计数据 A1 和 A2
- client-x 和统计数据 B1 和 B2
- client-y 和统计数据 A1 和 A2
- client-y 和统计 B1 和 B2
在这一点上,对于如何使用 gnuplot 处理这个问题完全不知所措。我对生成绘图的其他选项持开放态度,但在我获得 new/updated 数据集时需要编写脚本。
为了获得线图,您必须在 gnuplot 之外进行数据过滤,例如awk
:
首先使用
设置时间格式
set xdata time
set timefmt '%Y-%m-%dT%H:%M:%S'
然后提取所有可能的客户端名称,除非您已经知道可能的客户端名称:
clients = system("awk '!/^#/ { print }' 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
问题与非常相似。
我有一个数据集,我想从中生成一组图,但我无法 gnuplot 执行此操作。
我有一个包含以下列的数据集:
- 时间(ISO-8601 格式的时间戳
YYYY-MM-DDTHH:mm:ss.sssZ
) - client(客户端的主机名;数据集中两个不同的客户端)
- 服务器(服务器的主机名;数据集中八个不同的服务器)
- 两个相关的统计数据,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
我想生成四张图表,作为折线图,每一张代表相关统计数据和客户的组合。
- client-x 和统计数据 A1 和 A2
- client-x 和统计数据 B1 和 B2
- client-y 和统计数据 A1 和 A2
- client-y 和统计 B1 和 B2
在这一点上,对于如何使用 gnuplot 处理这个问题完全不知所措。我对生成绘图的其他选项持开放态度,但在我获得 new/updated 数据集时需要编写脚本。
为了获得线图,您必须在 gnuplot 之外进行数据过滤,例如awk
:
首先使用
设置时间格式set xdata time
set timefmt '%Y-%m-%dT%H:%M:%S'
然后提取所有可能的客户端名称,除非您已经知道可能的客户端名称:
clients = system("awk '!/^#/ { print }' 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
问题与