Як в gnuplot як побудувати графік з лініями, але пропустити пункти даних, що пропущені?


20

Я маю значення, пов'язане з кожним днем, як таке:

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


Ось малюнок проблеми: i.stack.imgur.com/aYH4N.png (не можна додати зображення до публікації чомусь). Я хочу, щоб обведена область залишилася порожньою.
Анна

Ласкаво просимо до суперпользователя. Ви не можете, тому що просто ще не зібрали достатньо репутації на цьому сайті. Якщо ви незадоволені моїми змінами, ви, звичайно, можете їх відновити (або відредагувати ще раз).
Baarn

Відповіді:


16

Поставте порожній запис (порожній рядок), де немає даних. З документів :

Поодинокі порожні записи позначають розриви в сюжеті; жоден рядок не приєднається до точок, розділених порожніми записами (якщо вони побудовані у стилі рядка).


1
Дякую, це працює за розриви у всіх серіях. Що робити, якщо у мене є розрив в одній серії, а не в іншій?
Анна

8
Це спрацювало, поставивши тире замість значень.
Анна

Для мене - це була лінія з 2 космічними символами.
3kstc

9

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

Якщо ви побудуєте лінії за допомогою

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

тоді Gnuplot залишить пробіл.


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. Щоразу, коли викликається усе, воно повертає або значення y, або "0/0", залежно від того, чи перевищує абсолютне значення різниці між x та його попереднім значенням пороговим.

Значення 0/0 вказує gnuplot ігнорувати цю точку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.