我有一个实验,我测量了一些算法相对于三个基线的性能。因此,我想为算法绘制直方图,通过直方图条绘制各种样式的水平线以显示基线。
下面是我通过在 Gnuplot 生成的图表上手动绘制水平线生成的示例。直方图“sentence”和“document”代表我测试的算法,“mono”、“random”和“MFS”是基线。
有什么方法可以在 Gnuplot 本身中做到这一点吗?如果没有,任何人都可以推荐另一个可以做到这一点的工具吗?或者也许我应该使用更好的可视化技术?
我有一个实验,我测量了一些算法相对于三个基线的性能。因此,我想为算法绘制直方图,通过直方图条绘制各种样式的水平线以显示基线。
下面是我通过在 Gnuplot 生成的图表上手动绘制水平线生成的示例。直方图“sentence”和“document”代表我测试的算法,“mono”、“random”和“MFS”是基线。
有什么方法可以在 Gnuplot 本身中做到这一点吗?如果没有,任何人都可以推荐另一个可以做到这一点的工具吗?或者也许我应该使用更好的可视化技术?
这绝对是可能的。这是我制作的一个小例子:
首先,数据文件"data.dat"
:
#histograms
1 3 stack1
2 2 stack2
3 1 stack3
#mono
.6
.6
1.5
1.5
3.1
3.1
现在绘制它的 gnuplot 脚本:
set yrange [0:*]
set style data histograms
set style histogram cluster gap 1
IDX=-1
xpos(x)=(IDX=IDX+1, IDX%2==0)?(IDX/2-.5):(IDX/2+.5)
set style fill solid
plot 'data.dat' index "histograms" u 1:xtic(3) title "column1", \
'' index "histograms" u 2 title "column2", \
'' index "mono" u (xpos($1)):1 w lines ls -1 title "mono"
这比我的上一个版本要复杂一些。绘制直方图集群时,每个集群都以一个整数为中心,从 0 开始,每个集群递增 1(无论您对 xtics 和标签的设置如何)。我所做的是使用该信息来简化数据文件。现在这个绘图命令将 2 个不同的数据集绘制为直方图(取自数据文件“直方图”部分的每一列),第一个添加 xtic 标签。然后是棘手的部分:我编写了一个具有副作用的函数(我认为 gnuplot 内联函数在 gnuplot 4.4 中是新的)。每次调用时,变量的值IDX
都会递增——因此,xrange 上的当前位置始终为IDX/2
. IDX/2-.5
此功能在返回和之间交替IDX/2+.5
. 请注意,要创建另一个 dataset random
,您需要另一个与它xpos2
相同的函数,xpos1
只是它使用单独的迭代器。