19

У меня есть значение, связанное с каждым днем, как таковое:

120530    70.1
120531    69.0
120601    69.2
120602    69.5
# and so on for 200 lines

При построении этих данных в gnuplot со строками точки данных хорошо связаны. К сожалению, в местах за неделю данные могут отсутствовать. Gnuplot рисует длинные линии на этих интервалах. Как я могу заставить gnuplot соединять точки только в последовательные дни?

Решения, которые требуют предварительной обработки данных, хороши, поскольку я уже сгладил это с помощью скрипта.

Вот что я использую:

set xdata time
set timefmt "%y%m%d"
plot "vikt_ma.txt" using 1:2 with lines title "first line", \\
     ""            using 1:3 with lines title "second line"

Пример:пример gnuplot

3 ответа3

15

Поставьте пустую запись (пустую строку) там, где нет данных. Из документов:

Отдельные пустые записи обозначают разрывы в сюжете; ни одна линия не соединит точки, разделенные пустыми записями (если они нанесены в виде линии).

9

Вы можете использовать любую строку, которая не является числом, в качестве значения для отсутствующих точек данных или явно указать отсутствующую строку данных с помощью команды set datafile missing .

Если вы затем строите линии, используя

plot "vikt_ma.txt" using 1:($2) with lines title "first line"

тогда Гнуплот оставит пробел.

2

Вы также можете сделать что-то вроде этого, чтобы автоматически создавать промежутки, когда расстояние между значениями x превышает некоторый порог:

previous=1
current=1
shift(x) = (previous=current, current=x)
yornothing(x,y) = ( shift(x), abs(x-previous)<7200?y:sqrt(0/0))

plot "file.dat" using 1:(yornothing($1,$2)) with lines

Вам нужно будет настроить начальные значения "предыдущий" и "текущий", а также пороговое значение ("7200" в приведенном выше примере).

Функция "yornothing" использует функцию "shift" для хранения одного предыдущего значения x. Каждый раз, когда yornothing вызывается, он возвращает либо значение y, либо «0/0», в зависимости от того, превышает ли пороговое значение абсолютное значение разности между x и его предыдущим значением.

Значение 0/0 указывает gnuplot игнорировать эту точку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .