2013-10-18 73 views
2

我在gnuplot的以下數據:gnuplot的,拉絲重複點和着色

2012-09-18 0 2 12 
2012-03-15 1 4 5 
2012-12-18 24 8 11 
2012-09-18 2 8 11 
2012-03-15 16 5 5 
2011-12-06 5 2 3 
2012-12-18 3 12 8 
2012-09-18 4 4 8 
2012-03-29 11 6 2 
2011-12-06 9 7 3 
2012-12-18 6 7 8 
2012-09-18 4 3 8 
2012-02-09 27 2 1 
2012-12-18 2 1 8 
2012-09-18 6 14 8 

第一柱; x(日期)

第2列; y

第3列;點顏色

第4列;出現次數(點是重複的)

我需要寫一個gnuplot的方案,其中:

  1. 我的繪製(X,Y)點。
  2. 根據第3列值(可能超過50種不同顏色)爲每個點提供不同的顏色。
  3. 如果第4列大於0,則該點被複制,並且它必須被繪製n次,並給它的x,y一個隨機位置,並有一個小的餘量。例如(rand(x)-0.5,rand(y)-0.5)。

另一個問題,什麼是最好的和最快的方式/工具來學習gnuplot?

回答

2

這應該是一個擴展我的回答對您的其他問題drawing duplicated points in gnuplot with small margin

你需要有解釋爲時間數據的第一列。爲此,您需要

set xdata time 
set timefmt '%Y-%m-%d' 

爲了設置點的顏色,最好是確定一個調色板,然後用linecolor palette,這都將根據其在調色板值的點的顏色。

因此,使用說明從drawing duplicated points in gnuplot with small margin最終的腳本是:

reset 
filename = 'data.dat' 

stats filename using 4 nooutput 

set xdata time 
set timefmt '%Y-%m-%d' 

set format x '%Y-%m' 

rand_x(x) = x + 60*60*24*7 * (rand(0) - 0.5) 
rand_y(y) = y + (rand(0) - 0.5) 

plot for [i=0:int(STATS_max)-1] filename \ 
    using (rand_x(timecolumn(1))):(i < $4 ? rand_y($2) : 1/0):3 pointtype 7 linecolor palette notitle 

,你心裏一定有一些其他的東西:

  1. stats調用一定要來set xdata time之前,因爲統計不要使用時間數據。
  2. 當使用using聲明中的時間數據進行計算時,需要使用timecolumn函數(與通用情況下的column$..相反)。這將時間作爲時間戳(即以秒爲單位)。
  3. 因爲這個原因,對於xy,您需要兩個不同的隨機函數,因爲縮放比例非常不同。在這裏,我在時間軸上使用了一週的「抖動」(60*60*24*7秒)。

與4.6.4結果是:

enter image description here

關於學習gnuplot一些言論,你的問題:儘量解決您的問題自己,然後發佈更具體的問題!瀏覽gnuplot演示以查看可能的情況,查看使用哪種功能或繪圖樣式,在文檔中查找它們,提供哪些選項/設置?玩這些演示,並嘗試應用到你的數據集等最後它的所有關於實踐(我已經使用gnuplot 12年了...)。

+0

thx很多,你只是驚人的,你幫了我很多。真的很感激:)我會盡我所能去做你告訴我的:) –

+0

我應用了你上面寫的東西,它的功能就像一個魅力,但視圖不適合我的數據。我添加了這兩個命令: set xrange [GPVAL_DATA_X_MIN:GPVAL_DATA_X_MAX] set yrange [GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX] 但它不適用於我! 任何線索? –

+0

這些變量只有在'plot'命令後纔可用,請參閱'help gnuplot-defined'。所以你可以做'設置終端推送;設置終端不明;情節......;設置終端彈出; replot',或者讀取'set autoscale'和'set offset'。 – Christoph