我想旋转标签以使其与定义的箭头平行
设置箭头 1 从 x,y 到 x+dx,y+dy
要计算 Canvas 坐标系中此箭头的角度,我需要考虑 x 轴和 y 轴的不同比例:
theta = atan(ratioxy*dy/dx)*180/pi,
其中ratioxy 是y 轴和x 轴上一个单位的长度之比。通过使用这个比例,我可以将正确旋转的文本写为
在 x,y 处设置标签 1“旋转文本”,向左旋转 θ
所以,我的问题是:
如何确定 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
允许将文本放在箭头上方而不是跨过它。
关于rotation - 如何确定 gnuplot 中轴的纵横比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38616925/