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

时间:2016-07-27 15:10:29

标签: rotation gnuplot aspect-ratio

我想旋转标签使其与

定义的箭头平行

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

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

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

其中ratioxy是在y和x轴上的一个整数的长度的比率。通过使用此比率,我可以将正确旋转的文本写为

在x处设置标签1“旋转文本”,向左旋转θ

所以,我的问题是:

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

1 个答案:

答案 0 :(得分:2)

在@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允许将文字放在箭头上方而不是横跨它。