gnuplot: как избежать масштабирования до 0 с заполненными кривыми? - PullRequest
1 голос
/ 09 апреля 2020

Если я строю кривую с заливкой with filledcurves gnuplot, похоже, всегда автоматически масштабирует ось Y до нуля. Почему? Жук? Я что-то пропустил? Как избежать? Любые идеи?

Если я сделаю:

plot $Data u 1:2 w filledcurves noautoscale

Я получаю сообщение об ошибке:

x range is invalid

Очевидно, что "noautoscale" делать пока нечего. Если я сначала делаю другой график, он также автоматически масштабирует заполненные кривые до 0. Итак, я не вижу способа автоматически масштабировать только заполненную кривую , а не до 0.

Код:

### how to autoscale a filled curve NOT to zero?
reset session

$Data <<EOD
3.8  3.8
9.1  3.8
9.1  9.1
3.8  9.1
3.8  3.8
EOD

unset key
set multiplot layout 1,4
    set title "with lines\n\n"
    plot $Data u 1:2 w lp pt 7
    set title "with filledcurves\n\n"
    plot $Data u 1:2 w filledcurves
    set title "with lines \\&\nwith filledcurves\n"
    plot $Data u 1:2 w lp pt 7, '' u 1:2 w filledcurves
    set title "with lines \\&\nwith filledcurves\n+noautoscale"
    plot $Data u 1:2 w lp pt 7, '' u 1:2 w filledcurves noautoscale
unset multiplot
### end of code

Результат:

enter image description here

1 Ответ

2 голосов
/ 09 апреля 2020

Это непреднамеренное последствие принятия команд построения в виде:

  plot $data using x:y1:y2 with filledcurves {options}

, которое необходимо для поддержки заполнения области между двумя кривыми. Поскольку в вашем примере второе значение y не инициализировано, оно остается равным нулю и влияет на диапазон автоматического масштабирования по y.

В разрабатываемой версии (и в -rc1 для 5.4, которую вы должны загрузить и протестировать), обходной путь заключается в принудительном использовании опции closed даже при наличии трех столбцов ввода:

  plot $data using 1:2:2 with filledcurves closed 

К сожалению, версия 5.2 не принимает здесь closed в качестве ключевого слова. Так что да, это ошибка.

Если вам случается знать координаты некоторой точки внутри (например, [7,7] в этом случае), то вы также можете использовать опцию:

 plot $data using 1:2 with filledcurves xy=7,7
...