2015-10-29 60 views
1

我的數據是一個典型的CSV般的文字,每一行由兩列,其中第一是文本和第二Unix時間戳,具體如下:如何繪製數據,如「<text><datetime>」,用gnu​​plot?

Mom 1441008169 
Dad 1442516527 
Ken 1441783871 
... 
<text> <unix-timestamp> 

我以爲我可以安排沿着時間軸數據,在沿着與時間戳對應的x軸的點處繪製與線中的文本對應的顏色的點/顏色的形狀。在最好的,我得到了GNUPLOT告訴我:

line 0: Need using spec for y time data 

,當我告訴它:

set ydata time 
set timefmt "%s" 
plot "-" 
<data> 
EOF 

我想用點,或鑽石或形狀與對應的文本字符串中的顏色渲染情節第一列。換句話說,如果我的文本值落在集合{「媽媽」,「爸爸」,「肯」)內,那麼gnuplot應該繪製這些形狀對應於紅色的「媽媽」,綠色的「爸爸」和「肯」以藍色或類似的方式,在沿着x軸對應於它們各自的時間戳的點處。

我面臨的挑戰是讓gnuplot區分文本字符串。這些數據可以被認爲是來自某個人的來話呼叫,其中時間戳表示呼叫的日期和時間,而文本表示呼叫的人。我認爲將這些數據表示爲繪製點/球體/鑽石/不同時間線上不同顏色的數據在視覺上是一個好主意。

我該怎麼做到這一點?我可以選擇性地生成某種標識符表,其中唯一的文本字符串每個都等同於唯一的順序生成的ID,如果這有助於gnuplot。

+0

不想過多地勸阻你,在gnuplot度過很長時間,你是否忠於那個包?你會發現更靈活的東西更現代化,廣泛貢獻,說pyplot。 –

+3

我喜歡'gnuplot',因爲它可以通過將數據傳遞到其標準輸入來輕鬆編寫腳本。在這一點上,我沒有考慮其他任何事情,但是如果gnuplot根本無法完成任務,我當然必須這樣做。 – amn

+0

關於錯誤,請參閱http://stackoverflow.com/q/18118186/2604213 – Christoph

回答

2

我想你想要的是像這樣enter image description here

x軸跨越這是由你的數據文件(第2列)指定的時間間隔。每個姓名(肯,媽,爸)用不同的點類型(pt)和特定顏色(lc rgb 'color')表示。

您可以生成此圖由以下命令(假設你的數據文件的名稱是「測試」):

set xdata time 
set timefmt "%s" 
set format x "%d/%m/%y" 
set xtics rotate 
unset ytics 
set yrange[0:2] 

plot 'test' u ($2):(stringcolumn(1) eq "Ken" ? 1 :1/0) w p pt 5 ps 1.5 lc rgb 'blue' t 'Ken',\ 
    '' u ($2):(stringcolumn(1) eq "Dad" ? 1 :1/0) w p pt 7 ps 1.5 lc rgb 'red' t 'Dad',\ 
    '' u ($2):(stringcolumn(1) eq "Mom" ? 1 :1/0) w p pt 3 ps 1.5 lc rgb 'green' t 'Mom' 

您可以通過給pt分配不同的號碼使用不同的點類型。 ps指定點的大小。

我想出了另一種表現是:enter image description here 您可以生成它:

plot 'test' u ($2):(1):(stringcolumn(1)) with labels t '',\ 
'' u ($2):(0.95) with impulses t '' 

我希望這回答了你的問題,這是你所期待的。

+0

這真的太棒了,謝謝!第一個情節原本是我想要的,但它的源代碼的複雜性,以及我如何不得不以某種方式預先將名字('Ken'等)映射到數字,我想我可能會去第二個情節。兩者似乎都是可視化數據的好方法。 – amn

相關問題