防止gnuplot中的反向行

防止gnuplot中的反向行,gnuplot,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处继续) 注意

我有一些由时钟时间给出的值,其中第一列是时间。但是,直到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结束。

至于环绕图形的边缘(类似吃豆人的效果),gnuplot自己无法做到这一点。即使是手动操作,您也必须根据连接线的坡度计算重新输入图形的正确点,并在数据中插入一个新点,以控制重新输入线的进入位置和退出线的退出位置。这需要外部处理

如果可以进行一些外部预处理,在13行之前添加一个空行将在绘图中插入一个不连续性,并阻止gnuplot连接这些点(有关gnuplot如何处理空行的信息,请参见
帮助数据文件
)。当然,您也可以对数据进行排序

我建议在打印之前对数据进行排序,但是如果您确实希望实现这种包装效果,下面的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
用线条绘制“

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


我们看到了您所指的从最右点延伸到下一个左点的后向线。python程序预处理的绘图通过图形的右侧延伸到这一点。

我在下面提供了一个答案,但我不能完全确定这是您想要的。您能再详细说明一下吗?可以吗这些代表同一个时钟日,或者你测量的是从凌晨3点到次日凌晨3点的天数?如果是从同一个时钟日开始的,为什么文件中的某些时间会发生得那么晚?我的回答是针对你想要的,还是你在寻找不同的东西?@Matthew非常感谢。但是,我需要的是x轴开始从0到24(不是从3到3)。我现在在一个注释中添加了这一点。从技术上讲,从凌晨2点开始的测量已经在第二天进行,但仍应像在当天进行的测量一样进行打印。因此,您是否希望带有3的线的x轴标签为0?另外,您是否希望最后一行出现在图表的左侧或右侧?这些线上的标签应显示什么?I更新了我的答案,显示了一个x轴范围为0到24的案例(目前是第二个图表)。我仍然需要其他问题的答案,以知道这是否解决了您的问题。如果您甚至可以提供您想要的图像,这可能会有所帮助-它不必看起来很好、准确或包含您的所有数据,您甚至可以在绘图程序中绘制它。显示您正在寻找的内容可能会使您的问题变得复杂我还是不太清楚。你想要一条从图的右边走到左边的线吗(吃豆人效应)?如果是这样,那就不太可能了。Gnuplot不能包装图形,即使是手动操作,您也必须计算斜率并以某种方式添加一个额外的点。如果您可以进行一些外部预处理,在
13
行之前添加一个空行将在绘图中插入不连续性,并阻止Gnuplot连接这些点当然,你也可以对数据进行排序。非常感谢。这可能是最好的解决方案。