如何使用 gnuplot 绘制带有“<text> <datetime>”等行的数据?

How to plot data with lines like "<text> <datetime>", with gnuplot?

我的数据是典型的类似 CSV 的文本,其中每一行由两列组成,第一列是文本,第二列是 unix 时间戳,如下所示:

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

我想我可以沿着时间轴排列数据,绘制 dots/shapes 与行中文本对应的颜色,在 x 轴上与时间戳对应的点上。充其量我让 gnuplot 告诉我:

line 0: Need using spec for y time data

当我告诉它:

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

我想使用点、菱形或形状渲染绘图,颜色与第一列中的文本字符串相对应。换句话说,如果我的文本值落在集合 {"Mom"、"Dad"、"Ken"} 内,那么 gnuplot 应该将这些对应于 "Mom" 的形状绘制为红色,"Dad" 为绿色,"Ken" 为蓝色,或类似的东西,在对应于它们沿 x 轴的各自时间戳的点上。

我面临的挑战是让 gnuplot 区分文本字符串。例如,数据可以被认为是来自某人的来电,其中时间戳表示呼叫的日期和时间,文本表示呼叫者。我认为将这些数据表示为沿时间线绘制的 dots/orbs/diamonds/whatever 不同颜色在视觉上是个好主意。

我将如何实现?我可以选择生成某种标识符 table,其中每个唯一的文本字符串都等同于一个唯一的顺序生成的 ID,如果这有助于 gnuplot。

我猜你想要的是这样的

x 轴跨越数据文件指定的时间间隔(第 2 列)。每个名字(肯、妈妈、爸爸)都由不同的点类型 (pt) 和特定的颜色 (lc rgb 'color') 表示。

您可以通过以下命令生成此图(假设您的数据文件的名称是 'test'):

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

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

您可以通过为 pt 分配不同的数字来使用不同的点类型。 ps 指定磅值。

我想到的另一种表示如下: 您可以通过以下方式生成它:

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

我希望这能回答您的问题,这正是您要找的。