防止gnuplot中的后向行

时间:2016-02-16 11:49:19

标签: gnuplot

我有一些由时钟时间给出的值,其中第一列是时间。但是,直到2点钟的值仍然属于当天。给定

3 1
12 4
18 1
21 2
1 3
2 0

命名为test.data,我想在gnuplot中打印出来:

set xrange [0:24]
plot 'test.data' with lines

但是,该图包含一条反向线。它贯穿整个图表。

有没有办法告诉gnuplot明确地不打印这样的后向线,或者甚至更好,打印它们围绕x轴打印(例如在我的例子中将线条绘制为前进线直到24,然后继续它0)?

注意:图的x轴仍应从0开始,到24结束。

1 个答案:

答案 0 :(得分:2)

至于包裹图形的边缘(类似pac-man的效果),gnuplot不能自己做。即使手动操作,您也必须以某种方式计算根据连接线的斜率重新输入图形的正确点,并在数据中插入新点以控制重新进入线进入的位置,以及退出线路。这需要外部处理。

如果你可以进行一些外部预处理,在1 3行之前添加一个空行将在图中插入一个不连续点并阻止gnuplot连接这些点(有关gnuplot如何处理空行,请参阅help datafile)。当然,您也可以随时对数据进行排序。

我建议在绘图之前对数据进行排序,但是如果你想做这个包装效果,下面的python程序( wrapper.py )将为它设置数据

data = [tuple(map(float,x.strip().split(" "))) for x in open("data.txt","r")]
data2 = sorted(data)

back_in_to = data2[0]
out_from = data2[-1]

xdelta = back_in_to[0] + 24 - out_from[0]
ydelta = back_in_to[1] - out_from[1]

slope = ydelta/xdelta

outy = out_from[1] + (24-out_from[0])*slope

print(0,outy)
for x in data2:
    print(*x)
    if x[0]==data[-1][0]: print("")
print(24,outy)

它读入数据(假设在 data.txt 中,并计算一条线应离开图表的位置以及应重新输入的位置,将这些点添加到已排序的数据中它在原始图形中的最后一个点之后添加一个空行,导致该行中断。我们可以绘制如

plot "< wrapper.py" with lines

enter image description here

如果我们看一下你原来的情节

enter image description here

我们看到你提到的后向线从最右边的点到达下一个左边的点。 python程序预处理的图通过图的右侧到达此点。