Причина, по которой ваш график ведет себя так, как он есть, и пример (1) из theozh также делает то, что «replot f (x)» действует, прикрепляя «, f (x)» к концу предыдущей команды plot , Поместив его в цикл, вы в основном создаете последовательные команды
plot f(x,i)
plot f(x,i), f(x,i)
plot f(x,i), f(x,i), f(x,i)
...
Да, значение i может меняться каждый раз, но, тем не менее, каждая команда plot создает несколько копий одной и той же вещи.
Альтернативное решение: я обычно не рекомендую режим мультиплота для создания одного выхода, но в этом случае это может быть лучшим вариантом.
# force identical margins even if the range changes
set margins screen 0.1, screen 0.9, screen 0.1, screen 0.9
# ... same prelimary stuff as shown in the question
# revised loop using multiplot rather than replot
set multiplot
do for [i=nmin:nmax]{
fit [4:] h(x) name(i) using (f($1)):(f($4)) via a, b
plot name(i) using (f($1)):(f($4)) w l \
title sprintf("%04d", i) at screen 0.9, screen 1.0 - 0.02*i
unset tics
}
unset multiplot
Обратите внимание, что вы не можете использовать автоматически сгенерированное размещение заголовка, поскольку каждая из многократных итераций поместит заголовок в одно и то же место. Поэтому вместо этого мы используем форму «title foo at». Точно так же лучше отключить генерацию тиков после первого прохода, чтобы не перерисовывать тики и метки каждый раз в цикле.