В gnuplot, как построить с линиями, но пропустить пропущенные точки данных?

19

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

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

При построении этих данных в 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

Анна
источник
Вот изображение проблемы: i.stack.imgur.com/aYH4N.png (по какой-то причине не удается добавить изображения в публикацию). Я хочу, чтобы обведенная область оставалась пустой.
Анна
Добро пожаловать в суперпользователя. Вы не можете, потому что вы просто еще не набрали достаточно репутации на этом сайте. Если вы недовольны моими изменениями, вы, конечно, можете отменить их (или отредактировать).
Baarn

Ответы:

15

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

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

Кит
источник
1
Спасибо, это работает для разрывов во всех сериях. А что, если у меня есть разрыв в одной серии, а не в другой?
Анна
8
Это работало, ставя тире вместо значений.
Анна
Для меня - это была строка с 2 пробелами.
3
9

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

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

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

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

Roland W
источник
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 игнорировать эту точку.

Брайан Райт
источник