如何确定 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=0
。 offset
允许文本位于箭头上方而不是跨越它。
我想旋转标签使其与
定义的箭头平行设置箭头 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=0
。 offset
允许文本位于箭头上方而不是跨越它。