Я не знаю, как установить тики автоматически. Но, по крайней мере, вы можете установить их явно.
Вы хотите установить тики x2 при заданных значениях x1. Поскольку команда set x2tics
занимает тиковые позиции в координатах x2, вы можете преобразовать данные значения x1 в значения x2. Я изменил ваш сценарий, чтобы проиллюстрировать, что я имею в виду:
set xlabel "Quantity lower"
set xtics nomirror
set x2label "Quantity Upper"
set x2tics nomirror
# avoid warnings by setting the xrange before linking the axes
set xrange[30:2000]
# setup the link functions
c = 1.548458 # or 2*1.548458 ?
link_x1_x2(x) = 2*c**2/(2*x**2-c**2)
link_x2_x1(x) = c*sqrt((2+x)/(2*x))
set link x2 via link_x1_x2(x) inverse link_x2_x1(x)
# you want to set x2 tics at x1 = 100 and x1 = 1000
# check the corresponding x2 values
print "x2 = x1( 100) = ", link_x1_x2(100)
print "x2 = x1(1000) = ", link_x1_x2(1000)
# set the tics with formatted tic labels as an example
set x2tics ("a: %.2e" link_x1_x2(100), "b: %.2e" link_x1_x2(1000))
set ylabel "Quantity y"
set ytics 0.2
set samples 400
Spectrum(x) = exp(-(x-500)**2/(400))
# this seems not to work with explicit tics
# set format x2 "%.2f"
plot Spectrum(x) w l title "Spectrum"
Это вывод:
Если вам нужны логарифмические оси, а команда set link
не работает, вы можете заменить ее, явно указав для свойства x2axis значение set x2range
. Смотрите модифицированный скрипт:
set xlabel "Quantity lower"
set xtics nomirror
set x2label "Quantity Upper"
set x2tics nomirror
# setup the link functions
c = 1.548458 # or 2*1.548458 ?
link_x1_x2(x) = 2*c**2/(2*x**2-c**2)
link_x2_x1(x) = c*sqrt((2+x)/(2*x))
xmin = 30
xmax = 2000
set xrange[xmin:xmax]
set x2range[link_x1_x2(xmin):link_x1_x2(xmax)]
set logscale x
set logscale y
set logscale x2
# set the tics at x1 = 100 and x1 = 1000
set x2tics ("a: %.2e" link_x1_x2(100), "b: %.2e" link_x1_x2(1000))
set ylabel "Quantity y"
#set ytics 0.2 # this must be improved for logarithmic plotting
set samples 400
Spectrum(x) = exp(-(x-500)**2/(400))
plot Spectrum(x) w l title "Spectrum"
Это результат:
Обратите внимание, что падение функции примерно при x1 = 1000 вызвано уменьшением числа.