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

标签 rotation gnuplot aspect-ratio

我想旋转标签以使其与定义的箭头平行

设置箭头 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=0offset 允许将文本放在箭头上方而不是跨过它。

关于rotation - 如何确定 gnuplot 中轴的纵横比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38616925/

相关文章:

强制 HTML 元素的纵横比的 Javascript 库?

css - 有没有办法在保持宽高比的情况下在 IE7 和 IE8 中使用背景大小?

gnuplot - 有没有办法让 gnuplot 使用 x 轴时间数据,但跳过某些时间间隔(例如非交易时间)

matlab - 在 matlab 绘图标题中写入 á 或 í

python - 具有更高时间精度的 gnuplot 替代方案

css - 在 CSS 中添加旋转悬停菜单

html - 强制 flexbox 容器内的图像填充/覆盖 100%

Android 添加平滑的屏幕旋转效果

javascript - css,使用旋转和jquery到初始位置

uikit - 核心图形和 UIKit 交互