12

我正在使用以下脚本在绘图上拟合函数。在输出图中,我想在拟合曲线上添加一个带有礼节的值,比如说点 f(3.25)。我已经读过,对于 gnuplot,在绘图上添加一个点非常棘手,特别是当该绘图是拟合函数绘图时。

有人知道如何在现有地块上添加这个单点吗?

set xlabel "1000/T (K^-^1)" font "Helvetica,20"    
#set ylabel "-log(tau_c)"       font "Helvetica,20"    
set ylabel "-log{/Symbol t}_c (ns)"     font "Helvetica,20"    
set title  "$system $type $method"        font "Helvetica,24"    
set xtics      font "Helvetica Bold, 18"                                  
set ytics      font "Helvetica Bold, 18"                                  
#set xrange[0:4]
set border linewidth 3
set xtic auto                          # set xtics automatically
set ytic auto                          # set ytics automatically
#set key on bottom  box lw 3 width 8 height .5 spacing 4 font "Helvetica, 24"
set key  box lw 3 width 4 height .5 spacing 4 font "Helvetica, 24"

set yrange[-5:]
set xrange[1.5:8]
f(x)=A+B*x/(1000-C*x)

A=1 ;B=-227 ; C=245

fit  f(x) "$plot1" u (1000/\$1):(-log10(\$2)) via A,B,C

plot [1.5:8] f(x)  ti "VFT" lw 4,  "$plot1" u (1000/\$1):(-log10(\$2)) ti "$system $type" lw 10



#set key on bottom  box lw 3 width 8 height .5 spacing 4 font "Helvetica, 24"

set terminal postscript eps color dl 2 lw 1 enhanced # font "Helvetica,20"

set output "KWW.eps"                                              



replot
4

3 回答 3

23

有几种设置点/点的可能性:

1.设置对象

如果您有简单的点,例如圆形、圆形楔形或正方形,则可以使用set object,必须在相应plot命令之前定义:

set object circle at first -5,5 radius char 0.5 \
    fillstyle empty border lc rgb '#aa1100' lw 2
set object circle at graph 0.5,0.9 radius char 1 arc [0:-90] \
    fillcolor rgb 'red' fillstyle solid noborder
set object rectangle at screen 0.6, 0.2 size char 1, char 0.6 \
    fillcolor rgb 'blue' fillstyle solid border lt 2 lw 2

plot x

要添加标签,您需要使用set label.

这可能很麻烦,但优点是您可以使用不同的线条和填充颜色,并且可以使用不同的坐标系(firstgraphscreen)。

4.6.4 的结果是:

在此处输入图像描述

2.使用点选项设置一个空标签

set label命令有一个point选项,可用于在某个坐标处使用现有的点类型设置点:

set label at xPos, yPos, zPos "" point pointtype 7 pointsize 2

3.用'+'绘图

最后一种可能性是使用特殊的文件名+,它会生成一组坐标,然后对其进行过滤,并使用labels绘图样式进行绘图(或者points如果没有要求标签:

f(x) = x**2
x1 = 2

set xrange[-5:5]
set style line 1 pointtype 7 linecolor rgb '#22aa22' pointsize 2
plot f(x), \
     '+' using ($0 == 0 ? x1 : NaN):(f(x1)):(sprintf('f(%.1f)', x1)) \
     with labels offset char 1,-0.2 left textcolor rgb 'blue' \
     point linestyle 1 notitle

$0,或等效地column(0),是坐标索引。在using语句中,只有第一个被认为是有效的,所有其他的都被跳过(使用NaN)。

请注意,使用+需要设置一个固定的xrange.

这有优点(或缺点?):

  1. 您可以使用通常的pointtype.
  2. 您只能将轴值用作坐标(如firstsecond用于上述对象)。
  3. 放置不同的点类型可能会变得更加困难。
  4. 它更多地涉及使用不同的边框和填充颜色。

结果是:

在此处输入图像描述

于 2013-10-18T19:14:16.230 回答
5

添加到克里斯托夫的优秀答案:

4. 用于stdin单点管道

replot "-" using 1:(f($1))
2.0
e

并使用第三个答案中的方法对其进行标记。

5.烘焙一个包含一个点的命名数据块 (版本> 5.0),然后您可以重新绘制而无需每次都重新提供它:

$point << EOD
2.0
EOD
replot $point using 1:(f($1)):(sprintf("%.2f",f($1))) with labels
于 2015-08-14T12:34:08.600 回答
1

6.使用长度为 1 的虚拟数组的解决方案:

array point[1]

pl [-5:5] x**2, point us (2):(3) pt 7 lc 3

在此处输入图像描述

7.或通过shell命令(见帮助piped-data):

pl [-5:5] x**2, "<echo e" us (2):(3) pt 7 lc 3
pl [-5:5] x**2, "<echo 2 3"  pt 7 lc 3

8. 特殊文件名'+'

pl [-5:5] x**2, "+" us (2):(3) pt 7 lc 3

这似乎是最短的解决方案。但请注意,虽然它看起来像一个点,但它们就像show samples绘制在同一位置上的 500 个点(请参阅 参考资料)。要只有一个点,需要临时调整采样(请参阅help plot sampling

pl [-5:5] x**2, [0:0:1] "+" us (2):(3) pt 7 lc 3

9. 零采样范围长度功能

键入最短,但在彼此之上绘制与指定的一样多的点samples

pl [-5:5] x**2, [2:2] 3 w p pt 7 lc 3
于 2020-04-06T12:18:21.583 回答