0

我绘制了一个图表,我想将 ytics 显示为 x 的函数。例如:我绘制 x^2 并且我想显示 0,1,4,9... 的 ytics。有没有办法自动执行此操作,或者我必须手动设置 y 轴上的每个 tic?我试图在定义 ytics 时设置一个函数,但 gnuplot 不接受它。谢谢你的帮助

4

3 回答 3

2

您可以使用for循环。当然,这里你需要提前知道你的x-range:

f(x)=x**2
set ytics ( sprintf('%f',f(-10)) f(-10) )
set for [i=-9:10] ytics add ( sprintf('%f',f(i)) f(i) )
plot f(x)
于 2013-02-13T16:01:09.840 回答
0

这是我的半自动答案,使用 for 循环构建 ytics 字符串:

#!/usr/bin/env gnuplot

set terminal pngcairo
set output 'test.png'

# x range
xmin = 0
xmax = 10
set xrange [xmin:xmax]

# define function of x to make plot, define tics
yfn(x) = x**2

# integer counting over tic positions
imin = int(xmin)
imax = int(xmax)

# build tics string
tix = '("'.sprintf('%d', yfn(imin)).'" '.sprintf('%d', yfn(imin))
do for [i=(imin+1):imax] {
 tix = tix.', "'.sprintf('%d', yfn(i)).'" '.sprintf('%d', yfn(i))
}
tix = tix.')'

set macros
# set ytics using macro expansion
set ytics @tix

plot yfn(x)

这是结果:

在此处输入图像描述

于 2013-02-13T16:08:27.103 回答
0

我没有完全准确地回答你的问题,虽然,这让我想到自定义 ytis 的标签。例子 :

f(x)=x**2
f1(x)=sqrt(abs(x))
set ytics format ""
set ytics scale 1
set t qt 0 enhanced font "Sans,9"
#set mytics 8

# ploting once the function for getting the GPVAL_ variable
plot f(x) t "f(x)=x**2"
# calculating function for the list of increment
linRg(start,end,increment)=system(sprintf("seq %g %g %g", start, increment, end))
# forcing the tics, otherwise, the tics of the first plot will still be marked
set ytics GPVAL_Y_MIN, (GPVAL_Y_MAX-GPVAL_Y_MIN)/8, GPVAL_Y_MAX
do for [i in linRg(GPVAL_Y_MIN, GPVAL_Y_MAX, (GPVAL_Y_MAX-GPVAL_Y_MIN)/8)] { pr i; set ytics add ('f(|'.gprintf("%.1s%c",f1(i)).'|)'.gprintf("=%.1s%c",i) i)}
replot

将产生:在此处输入图像描述

于 2021-11-29T09:38:33.620 回答