我有一个实验,我测量了一些算法相对于三个基线的性能。因此,我想绘制算法的直方图,通过直方图条绘制各种样式的水平线以显示基线。
下面是我通过在Gnuplot生成的图表上手动绘制水平线而生成的示例。直方图“句子”和“文档”代表我测试的算法,“mono”,“random”和“MFS”是基线。
我有什么办法可以在Gnuplot中做到这一点吗?如果没有,有人可以推荐另一种可以做到这一点的工具吗?或许我应该使用更好的可视化技术?
答案 0 :(得分:2)
这绝对是可能的。这是我做的一个小例子:
首先,数据文件"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
之间交替显示。请注意,要创建另一个数据集random
,您需要另一个函数xpos2
,它与xpos1
相同,除非它使用单独的迭代器。