2012-07-30 146 views
0

我有一個實驗,我測量了一些算法相對於三條基線的性能。因此,我想繪製算法的直方圖,通過直方圖條繪製各種樣式的水平線以顯示基線。繪製橫跨直方圖條的水平線

下面是我通過在由Gnuplot生成的圖形上手動繪製水平線而生成的示例。直方圖「句子」和「文檔」代表我測試的算法,「單色」,「隨機」和「MFS」是基線。

有沒有什麼辦法可以在Gnuplot中做到這一點?如果沒有,任何人都可以推薦另一種可以做到的工具嗎?或者也許我應該使用更好的可視化技術?

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

回答

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和labels的設置如何)。我所做的是使用這些信息來簡化數據文件。現在這個繪圖命令將2個不同的數據集繪製爲直方圖(從數據文件的「直方圖」部分中的每列中獲取),第一個添加xtic標籤。然後棘手的部分:我寫了一個有副作用的函數(我認爲gnuplot內聯函數是新的gnuplot 4.4)。每次調用時,變量IDX的值都會增加 - 因此,xrange上的當前位置始終爲IDX/2。該功能在返回IDX/2-.5IDX/2+.5之間交替。請注意,要創建另一個數據集random,您需要使用另一個函數xpos2,它與xpos1相同,除了它使用單獨的迭代器。

+0

感謝您的回覆,@ mgilson。但是你的例子似乎沒有用Gnuplot 4.6正確繪製;我得到了[六個單一的直方圖,其中一個x軸標記爲-1到6,水平線離開酒吧一側](http://files.nothingisreal.com/tmp/stackexchange_mgilson.png)。如果我正確理解您的#mono數據集,您將傳入x和y座標以形成一條線。但是,在我的數據集中,我沒有在x軸上使用數字;你指定座標的方法仍然有效嗎? – Psychonaut 2012-07-30 17:26:55

+0

@Psychonaut - 希望我的編輯能夠解決您的問題。如果沒有,請隨時通過評論詢問更多。 – mgilson 2012-07-30 18:59:24