Заставить gnuplot показывать нулевую ось при автоматическом масштабировании - PullRequest
1 голос
/ 27 мая 2020

Я ищу способ разрешить автоматическое масштабирование gnuplot, но все же заставить график включать диапазон say [-1: 1] по оси y.

вместо такого изображения enter image description here Я бы хотел, чтобы оно выглядело так

enter image description here

Менее важно: если бы я мог избавиться от белого пространства сверху и снизу холста, это тоже было бы хорошо.

Мой код:

set encoding utf8
set yzeroaxis lt 1 lc 8 lw 2
set xzeroaxis lt 1 lc 8 lw 2
set xtics pi
set mxtics 6
set ytics 0.5
set grid mxtics ytics lt 1 lc 3 lw 0.5
unset key
set format x '%.0P?'
set samples 5000
set offset graph 0.0, graph 0.0, graph 0.1, graph 0.1
set xrange [-4*pi:4*pi]
set size ratio -1

set terminal pngcairo enhanced font 'Cambria' size 1600,900

do for [t=1:8]{
    A = 0.5*t

    do for [b=2:4]{

    do for [i=-4:4]{
        if(i!=0){
        c = 0.5*i
        outfile = sprintf('Asin(bx)+c/%.2gsin(%ux)%+.2g.png',A,b,c)
        set output outfile
        plot A*sin(b*x)+c lc 7 lw 2 }
    }
    }
}

1 Ответ

3 голосов
/ 27 мая 2020

Проверьте help xrange и прокрутите вниз ... Думаю, вы ищете это:

set yrange [*<-1:1<*]

Диапазон y будет автоматически масштабироваться, но всегда включает [-1: 1].

Дополнение:

По поводу вашего второго вопроса по поводу белого поля. После построения переменные GPVAL_TERM_YMAX и GPVAL_TERM_YMIN содержат значения для нижней и верхней y-координат графика на холсте (или экране или терминале) в «координатах терминала». В pngcairo 20 оконечных устройств имеют размер 1 пиксель. Чтобы увидеть больше переменных, введите show var GPVAL. Поскольку вы получаете эти значения только после построения , вам необходимо изменить график и соответствующим образом настроить размер терминала. Для метки x вы добавляете немного больше места, например, здесь d=80. Я добавил светло-серый фон просто для иллюстрации. И мне пришлось немного изменить ваши имена файлов.

Если вы хотите, чтобы ось x находилась в постоянном пиксельном положении изображения, вы можете проверить это: GNUplot - рисовать линию с помощью окна система координат

Код:

### adjust canvas to size of plot
reset session

set encoding utf8
set yzeroaxis lt 1 lc 8 lw 2
set xzeroaxis lt 1 lc 8 lw 2
set xtics pi
set mxtics 6
set ytics 0.5
set grid mxtics ytics lt 1 lc 3 lw 0.5
unset key
set format x '%.0Pπ'
set samples 1600
set offset graph 0.0, graph 0.0, graph 0.1, graph 0.1
set xrange [-4*pi:4*pi]
set size ratio -1

set yrange[*<-1:1<*]
set terminal pngcairo background rgb 0xfcfcfc  # background just added for illustration

set lmargin screen 0.03
set rmargin screen 0.97

d = 80
do for [t=1:8]{
    A = 0.5*t
    do for [b=2:4]{
        do for [i=-4:4]{
            if(i!=0){
                c = 0.5*i
                set terminal pngcairo enhanced font 'Cambria' size 1600,900 
                outfile = sprintf('A=%.1g,b=%.1g,c=%.1g.png',A,b,c)
                set output outfile
                plot A*sin(b*x)+c lc 7 lw 2
                set output
                NewHeight = GPVAL_TERM_YMAX - GPVAL_TERM_YMIN + d
                set terminal pngcairo enhanced font 'Cambria' size 1600,NewHeight
                set output outfile
                replot
                set output
            }
        }
    }
}
### end of code

Результат: (всего 2 примера из 90 сгенерированных графиков)

enter image description here

enter image description here

...