0

我有一个实验,我测量了一些算法相对于三个基线的性能。因此,我想为算法绘制直方图,通过直方图条绘制各种样式的水平线以显示基线。

下面是我通过在 Gnuplot 生成的图表上手动绘制水平线生成的示例。直方图“sentence”和“document”代表我测试的算法,“mono”、“random”和“MFS”是基线。

有什么方法可以在 Gnuplot 本身中做到这一点吗?如果没有,任何人都可以推荐另一个可以做到这一点的工具吗?或者也许我应该使用更好的可视化技术?

直方图,其中每个系列中的条被各种样式的线一分为二

4

1 回答 1

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. 请注意,要创建另一个 dataset random,您需要另一个与它xpos2相同的函数,xpos1只是它使用单独的迭代器。

于 2012-07-30T12:17:17.433 回答