我使用以下脚本来拟合图上的函数。在输出图中,我想在拟合曲线上添加一个带礼仪的值,让我们说点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
答案 0 :(得分:17)
设置点/点有几种可能性:
如果你有简单的点,如圆形,圆形楔形或正方形,你可以使用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
。
这可能很麻烦,但有一个优点,即您可以使用不同的线条和填充颜色,并且可以使用不同的坐标系(first
,graph
,screen
等)。
4.6.4的结果是:
set label
命令有point
选项,可用于使用特定坐标处的现有点类型设置点:
set label at xPos, yPos, zPos "" point pointtype 7 pointsize 2
最后一种可能是使用特殊文件名+
,它会生成一组坐标,然后对其进行过滤,并使用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
。
这有什么优点(或缺点?):
pointtype
。first
或second
)。结果是:
答案 1 :(得分:5)
增加Christoph的优秀答案:
<强> 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
答案 2 :(得分: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
这似乎是最短的解决方案。但是请注意,虽然看起来像是单个点,但它们却在相同位置上绘制了500个点(请参见show samples
)。
要仅获得一个点,就需要临时调整采样(请参见help plot sampling
)
pl [-5:5] x**2, [0:0:1] "+" us (1):(3) pt 7 lc 3