我有一個實驗,我測量了一些算法相對於三條基線的性能。因此,我想繪製算法的直方圖,通過直方圖條繪製各種樣式的水平線以顯示基線。繪製橫跨直方圖條的水平線
下面是我通過在由Gnuplot生成的圖形上手動繪製水平線而生成的示例。直方圖「句子」和「文檔」代表我測試的算法,「單色」,「隨機」和「MFS」是基線。
有沒有什麼辦法可以在Gnuplot中做到這一點?如果沒有,任何人都可以推薦另一種可以做到的工具嗎?或者也許我應該使用更好的可視化技術?
我有一個實驗,我測量了一些算法相對於三條基線的性能。因此,我想繪製算法的直方圖,通過直方圖條繪製各種樣式的水平線以顯示基線。繪製橫跨直方圖條的水平線
下面是我通過在由Gnuplot生成的圖形上手動繪製水平線而生成的示例。直方圖「句子」和「文檔」代表我測試的算法,「單色」,「隨機」和「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和labels的設置如何)。我所做的是使用這些信息來簡化數據文件。現在這個繪圖命令將2個不同的數據集繪製爲直方圖(從數據文件的「直方圖」部分中的每列中獲取),第一個添加xtic標籤。然後棘手的部分:我寫了一個有副作用的函數(我認爲gnuplot內聯函數是新的gnuplot 4.4)。每次調用時,變量IDX
的值都會增加 - 因此,xrange上的當前位置始終爲IDX/2
。該功能在返回IDX/2-.5
和IDX/2+.5
之間交替。請注意,要創建另一個數據集random
,您需要使用另一個函數xpos2
,它與xpos1
相同,除了它使用單獨的迭代器。
感謝您的回覆,@ 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
@Psychonaut - 希望我的編輯能夠解決您的問題。如果沒有,請隨時通過評論詢問更多。 – mgilson 2012-07-30 18:59:24