在GNUplot中绘制相交线

时间:2019-03-24 15:18:21

标签: gnuplot

我一直无法从耙文档和演示中找到我要在GNUplot中执行的操作的任何示例。

基本上,我想以10/50/90%的标记在此输出上绘制蓝线,绿线和红线(用于演示)。

编辑:为清楚起见,我想确定分布线在 hit 处的累积分布在0.1 / 0.5 / 0.9处,以了解绘制哪个坐标线在。谢谢!

set terminal png size 1600,800 font "Consolas" 16
set output "test.png"

set title "PDF and CDF - 1000 Simulations"
set grid y2
set ylabel "Date Probability"

set y2range [0:1.00]
set y2tics 0.1
set y2label "Cumulative Distribution"

set xtics rotate by 90 offset 0,-5

set bmargin 6

plot "data.txt" using 1:3:xtic(2) notitle with boxes axes x1y1,'' using 1:4 notitle with linespoints axes x1y2 

enter image description here

2 个答案:

答案 0 :(得分:1)

尚不清楚您是要询问如何找到累积分布线达到0.1、0.5、0.9的x坐标(很难做到,我暂时将其保留)还是询问如何绘制一次你知道那些x值。后面的部分很容易。将您要绘制的线条想成是矩形的未修剪部分,该部分从图延伸到右下角:

set object 1 rectangle from x1, 0.1 to graph 2, -2 fillstyle empty border lc "blue"
set object 2 rectangle from x2, 0.1 to graph 2, -2 fillstyle empty border lc "green"
set object 3 rectangle from x3, 0.1 to graph 2, -2 fillstyle empty border lc "red"
plot ...

答案 1 :(得分:1)

根据累积数据曲线中的点数,可能需要插值。选择以下示例,以使原始数据点都不会达到您的级别10%,50%,90%。如果您的数据没有稳定增长,它将采用与您的水平相匹配的最后一个值。 步骤如下:

  1. 将数据绘制到虚拟表中。
  2. 检查Level在连续y值(y0y1)之间的时间。
  3. 记住xp中的插值x值。
  4. 从图形的边界向点(xp,Level)绘制箭头(或使用@Ethan的部分外部矩形“技巧”)。

代码:

### linear interpolation of data
reset session
set colorsequence classic
set key left

# create some dummy data
set sample 10
set table $Data
    plot [-2:2] '+' u 1:(norm(x)) with table
unset table

Interpolate(yi) = x0 + (x1-x0)*(yi-y0)/(y1-y0)

Levels = "0.1 0.5 0.9"
do for [i=1:words(Levels)] {
    Level = word(Levels,i)
    x0 = x1 = y0 = y1 = NaN
    set table $Dummy
        plot $Data u (x0=x1,x1=$1,y0=y1,y1=$2, (y0<=Level && Level<=y1)? (xp=Interpolate(Level)):NaN ): (Level) w table
    unset table
    set arrow i*2   from xp, graph 0 to xp,Level nohead lc i
    set arrow i*2+1 from xp,Level to graph 1,Level nohead lc i
}

plot $Data u 1:2 w lp pt 7 lc 0 t "Original data"
### end code

结果:

enter image description here