Linux gnuplot-两个图的交点

Linux gnuplot-两个图的交点,linux,csv,gnuplot,Linux,Csv,Gnuplot,我正在使用gnuplot从两个单独的csv文件(在这个链接中找到:)以不同的行数绘制数据,从而生成以下图形 这些数据在csv文件中似乎没有通用的时间戳(第一列),但是gnuplot似乎适合上面所示的绘图 下面是我用来生成绘图的gnuplot脚本 # ###### GNU Plot set style data lines set terminal postscript eps enhanced color "Times" 20 set output "output.eps" set ti

我正在使用
gnuplot
从两个单独的csv文件(在这个链接中找到:)以不同的行数绘制数据,从而生成以下图形

这些数据在
csv
文件中似乎没有通用的时间戳(第一列),但是
gnuplot
似乎适合上面所示的绘图

下面是我用来生成绘图的
gnuplot
脚本

# ###### GNU Plot

set style data lines
set terminal postscript eps enhanced color "Times" 20

set output "output.eps"

set title "Actual vs. Estimated Comparison"

set style line 99 linetype 1 linecolor rgb "#999999" lw 2
#set border 1 back ls 11
set key right top
set key box linestyle 50
set key width -2
set xrange [0:10]
set key spacing 1.2
#set nokey

set grid xtics ytics mytics
#set size 2
#set size ratio 0.4

#show timestamp
set xlabel "Time [Seconds]"
set ylabel "Segments"

set style line 1 lc rgb "#ff0000" lt 1 pi 0 pt 4 lw 4 ps 0

plot  "estimated.csv" using ($1):2 with lines title "Estimated", "actual.csv" using ($1):2 with lines title "Actual";
我们是否可以通过忽略绿色绘图上方的峰值来打印(写入文件)这些绘图交点的值?我还尝试过执行sql连接查询,但它似乎没有打印出任何内容,原因与我上面解释的相同


PS:如果蓝线不接触绿线(即,如果它远低于绿线),我想取最近绿线的值,这样它将与实际数据集一一对应(或非常接近)

也许可以强制Gnuplot在一个精细的网格上重新插入两个数据集,保存这些辅助数据,然后逐行比较。然而,我认为将此任务委托给外部工具确实更实际

这当然不是最有效的方法,但是“惰性方法”可以是读取数据点,将每个数据集解释为一个线字符串(线段集合,本质上相当于假设数据点之间的线性插值),然后计算交点。在Python中,执行此操作的脚本可能如下所示:

#!/usr/bin/env python
import sys

import numpy as np
from shapely.geometry import LineString
#-------------------------------------------------------------------------------
def load_data(fname):
    return LineString(np.genfromtxt(fname, delimiter = ','))
#-------------------------------------------------------------------------------
lines = list(map(load_data, sys.argv[1:]))

for g in lines[0].intersection(lines[1]):
    if g.geom_type != 'Point':
        continue
    print('%f,%f' % (g.x, g.y))
然后在Gnuplot中,可以直接调用它:

set terminal pngcairo
set output 'fig.png'

set datafile separator comma
set yr [0:700]
set xr [0:10]

set xtics 0,2,10
set ytics 0,100,700

set grid

set xlabel "Time [seconds]"
set ylabel "Segments"

plot \
    'estimated.csv' w l lc rgb 'dark-blue' t 'Estimated', \
    'actual.csv' w l lc rgb 'green' t 'Actual', \
    '<python filter.py estimated.csv actual.csv' w p lc rgb 'red' ps 0.5 pt 7 t ''
设置终端pngcairo
设置输出“fig.png”
设置数据文件分隔符逗号
设定年份[0:700]
设置xr[0:10]
将xtics设置为0,2,10
设置ytics 0100700
设置网格
设置xlabel“时间[秒]”
设置标签“段”
密谋\
'estimated.csv'w l lc rgb'深蓝色't'estimated'\
'actual.csv'带lc rgb'绿色't'实际'\

“除非我大错特错,否则Gnuplot是这项工作的错误工具。这是一个用于绘图的程序,而不是用于数据操作或处理。你想要一种通用的编程语言。你能详细解释一下“图的交集”是什么意思吗?您想保持“紫色数据”的原样,只裁剪“绿色数据”上方的数据?我指的是粉色线和绿色线与您从上面的绘图中看到的相同(或几乎相同)的点。@DestaHaileselassieHagos您可以直接使用脚本并将其输出重定向到文件,例如。,
python filter.py estimated.csv actual.csv>points.csv
我做了,在这里可以找到包含数据点的新绘图:。但是,过滤点少于实际数据集的10%(这是基本事实)。如果蓝线没有接触到绿线,让我们取绿线的值,这样它将与实际数据集一一对应(或非常接近)。让我编辑我的问题,我会将你的答案标记为已接受。你看到我的最后一个问题ewcz了吗?