在直方图条上绘制水平线

时间:2012-07-30 09:00:22

标签: charts plot gnuplot histogram data-visualization

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

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

我有什么办法可以在Gnuplot中做到这一点吗?如果没有,有人可以推荐另一种可以做到这一点的工具吗?或许我应该使用更好的可视化技术?

a histogram where the bars in each series are bisected by lines of various styles

1 个答案:

答案 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-.5IDX/2+.5之间交替显示。请注意,要创建另一个数据集random,您需要另一个函数xpos2,它与xpos1相同,除非它使用单独的迭代器。