我的数据是典型的类似CSV的文本,其中每一行由两列组成,其中第一列是文本,第二列是unix时间戳,如下所示:
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
我想使用点,钻石或颜色与第一列中的文本字符串对应的颜色来渲染绘图。换句话说,如果我的文本值属于集合{&#34;妈妈&#34;,&#34;爸爸&#34;,&#34;肯&#34;},那么gnuplot应绘制与&对应的这些形状#34;妈妈&#34;红色,&#34;爸爸&#34;绿色,&#34;肯&#34;蓝色或类似的东西,在与沿x轴各自的时间戳相对应的点处。
我面临的挑战是让gnuplot区分文本字符串。例如,数据可以被认为是来自人的来电,其中时间戳表示呼叫的日期和时间,而文本表示呼叫的人。我认为将这些数据表示为绘制的点/球体/菱形/沿着时间线的任何不同颜色都是一个好主意,在视觉上。
我将如何实现这一目标?我可以选择生成某种标识符表,其中唯一的文本字符串每个等同于唯一的顺序生成的ID,如果这有助于gnuplot。
答案 0 :(得分:2)
x轴跨越数据文件(第2列)指定的时间间隔。每个名称(Ken,Mom,Dad)由不同的点类型(pt
)和特定颜色(lc rgb 'color'
)表示。
您可以通过以下命令生成此图表(假设您的数据文件的名称为&#39; test&#39;):
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
指定磅值。
plot 'test' u ($2):(1):(stringcolumn(1)) with labels t '',\
'' u ($2):(0.95) with impulses t ''
我希望这能回答你的问题,而这正是你所寻找的。 p>