如何确定 gnuplot 中轴的纵横比?

How to determine axes' aspect ration in gnuplot?

我想旋转标签使其与

定义的箭头平行

设置箭头 1 从 x,y 到 x+dx,y+dy

要计算此箭头在 canvas 坐标系中的角度,我需要考虑 x 轴和 y 轴的不同比例:

theta = atan(ratioxy*dy/dx)*180/pi,

其中 ratioxy 是 y 轴和 x 轴上单位长度的比率。通过使用这个比例,我可以将正确旋转的文本写为

设置标签 1 "Rotated text" at x,y left rotate by theta

所以,我的问题是:

如何确定在 y 轴和 x 轴上测量的一个单位的长度之间的比率?

根据@Christoph 的评论,show var GPVAL_TERM 揭示了 gnuplot 在情节之后设置的有趣变量:

GPVAL_TERM_XMIN = 440
GPVAL_TERM_XMAX = 6159
GPVAL_TERM_YMIN = 300
GPVAL_TERM_YMAX = 4639
GPVAL_TERM_XSIZE = 6400
GPVAL_TERM_YSIZE = 4800
GPVAL_TERM_SCALE = 1

所以比率 plotratio=(GPVAL_TERM_XMAX-GPVAL_TERM_XMIN)/(GPVAL_TERM_YMAX-GPVAL_TERM_YMIN) 给出了绘图区的纵横比。您还需要有绘图范围的比率,即 rangeratio=(GPVAL_XMAX-GPVAL_XMIN)/(GPVAL_YMAX-GPVAL_YMIN)。 你要的比例是ratioxy=rangeratio/plotratio

为了设置变量,您需要先通过 gnuplot。为此,使用一个宏:

MYPLOT='"file.dat" using (whatever(column(1)):(function(column(2))) with lines'
stats @MYPLOT
plotratio=(GPVAL_TERM_XMAX-GPVAL_TERM_XMIN)/(GPVAL_TERM_YMAX-GPVAL_TERM_YMIN)
rangeratio=(GPVAL_X_MAX-GPVAL_X_MIN)/(GPVAL_Y_MAX-GPVAL_Y_MIN)
set arrow 1 from x,y to x+dx,y+dy
theta = atan2(rangeratio/plotratio*dy,dx)*180/pi
set label 1 "Rotated text" at x,y left rotate by theta offset sin(theta),cos(theta)
plot @MYPLOT

atan2让你拥有dx=0offset 允许文本位于箭头上方而不是跨越它。