gnuplot:在y tics位置上强制y2轴抽搐

时间:2013-09-24 08:46:00

标签: gnuplot

受到另一个答案中的设置链接的启发,我想绘制一个图表并显示不同的比例轴。

set grid mytics
set xrange[1:5]  
set yrange[0:3]
set y2range[0:30]
set xlabel "a"   
set ylabel "b"  
set ytics 
set y2label "c"
set mytics 2

ca = 0.05
cb = 0.5

f(x) = sin(x*pi/180)*cb *1000
i(x) = asin(x/1000 / cb )/pi*180
set link y2 via f(y) inverse i(y)

pl asin(ca /x)/pi*180 title "a"

它按预期绘制了图和轴,但我想要的是y2轴上的抽搐在ytics上是精确的(尽管它们将是非圆数)

2 个答案:

答案 0 :(得分:1)

没有选择例如6在轴上均匀分布抽搐(就像使用set my2tics 7一样)。但您可以手动添加抽搐,因为您知道功能范围。

首先,您需要使用

清除所有自动y2tics
set y2tics (f(0))

然后你可以在循环中设置所有次要和主要抽搐:

do for [i=0:6] {
    set y2tics add (f(i/2.0))
    set y2tics add ('' f(i/2.0 + 0.25) 1)
}

请注意,使用浮点增量循环不起作用。

所以你的完整脚本如下所示:

reset
set grid mytics
set xrange[1:5]  
set yrange[0:3]
set y2range[0:30]
set xlabel "a"   
set ylabel "b"  
set ytics nomirror
set y2label "c"
set mytics 2

ca = 0.05
cb = 0.5

f(x) = sin(x*pi/180)*cb *1000
i(x) = asin(x/1000 / cb )/pi*180
set link y2 via f(y) inverse i(y)

set format y2 '%.2f'
set y2tics (f(0)) # clear all automatic y2tics
do for [i=0:6] {
    set y2tics add (f(i/2.0))
    set y2tics add ('' f(i/2.0 + 0.25) 1)
}

pl asin(ca /x)/pi*180 title "a"

结果:

enter image description here

只要知道主要抽搐的数量,就可以将y2tics设置为独立于yrange。首先使用unknown终端进行绘图,之后您可以将yrange值作为变量GPVAL_Y_MINGPVAL_Y_MAX来访问。不幸的是,人们无法访问轴的抽动数:

...
set link y2 via f(y) inverse i(y)

set terminal push # save current terminal
set terminal unknown
pl asin(ca /x)/pi*180 title "a"

num_tics = 7
set format y2 '%.2f'
set y2tics (f(GPVAL_Y_MIN)) # clear all automatic y2tics
Y0 = GPVAL_Y_MIN
DY = (GPVAL_Y_MAX - GPVAL_Y_MIN)/(num_tics-1)
do for [i=0:(num_tics-1)] {
    set y2tics add (f(Y0+i*DY))
    set y2tics add ('' f(Y0+(i+0.5)*DY) 1)
}

set terminal pop # restore terminal
replot

答案 1 :(得分:0)

默认情况下,整数 xtics似乎映射到x2tics。

以下代码段从 https://stackoverflow.com/a/52121541/11769765 enter image description here

set tics nomirror
set x2tics
set link x2 via x**2 inv sqrt(x)
plot sin(x)

但是,十进制值未映射,就像放大时看到的那样: enter image description here