Позвольте мне начать с того, что я работаю над:
$ gnuplot --version
gnuplot 5.2, уровень исправления 2
Я хотел бы построить и подогнать данные даты / времени в gnuplot, чтобы только выполнялась подгонка, а затем отображалась в поддиапазоне графика.
Пример данных, с которыми я играл, может, например, можно найти здесь .
РЕДАКТИРОВАТЬ : я понял, что данные в файле не совпадают с подписью timefmt
, я добавил /06
к каждой линии, чтобы точка была нарисована в середине года, что позволило составить график вместе с ежемесячными данными из того же источника.
Я могу получить желаемый результат с помощью приведенного ниже кода, где я рисую три функции: одну по всему диапазону графика и две другие, которые охватывают только часть диапазона дат.
set key left
set yrange[-0.75:1.0]
set xdata time
set timefmt '%Y/%m'
r=10e-10
e(x) = r*x+s
fit e(x) 'HadCRUT.4.6.0.0.annual_ns_avg_smooth.txt' using 1:2 via r,s
a=10e-10
f(x) = a * x + b
set xrange ["1970/06":"2018/06"]
fit f(x) 'HadCRUT.4.6.0.0.annual_ns_avg_smooth.txt' using 1:2 via a,b
g(x) = ( x > "1970/06" ) ? f(x) : 1/0
set xrange ["1850/06":"1970/06"]
c=9.24859e-11
h(x) = c * x + d
fit h(x) 'HadCRUT.4.6.0.0.annual_ns_avg_smooth.txt' using 1:2 via c,d
i(x) = ( x < "1970/06" ) ? h(x) : 1/0
set xrange ["1849/06":"2018/06"]
set term png size 1500,1000
set output 'annual_average_with_fit.png'
plot 'HadCRUT.4.6.0.0.annual_ns_avg_smooth.txt' using 1:2 with lp lw 2 t'annual avg (decadally smoothed)', e(x) t'full range fit' lw 2, i(x) t'1850-1970 fit' lw 2, g(x) t'1970-2018 fit' lw 2
который дает этот участок
Это все хорошо и хорошо, но (и вот здесь возникает вопрос) в принципе, я должен быть в состоянии достичь того же результата и другими способами.
Во-первых: я ограничиваю диапазон данных файла определенным диапазоном, чтобы он соответствовал только этому диапазону. В принципе я должен быть в состоянии сделать то же самое, используя этот (тип) синтаксис:
fit ["1970/06":"2018/06"] f(x) 'HadCRUT.4.6.0.0.annual_ns_avg_smooth.txt' using 1:2 via a,b
, что, однако, дает
Прочитано 168 баллов
Пропущено 168 точек за пределами диапазона [x = 1970: 2018]
[...] Нет данных для соответствия
, что кажется странным, учитывая, что set xrange
явно дает желаемый эффект.
Во-вторых, пытаясь ограничить построение кривой в соответствии с диапазоном с помощью
plot 'HadCRUT.4.6.0.0.annual_ns_avg_smooth.txt' using 1:2 with lp lw 2 t'annual avg (decadally smoothed)', ["1970/06":"2018/06"] f(x) t''
вообще не отображает функцию.
Возможно, я упускаю из виду что-то очень простое, но, пробуя разные вещи, я не вижу, что это такое