Пометьте точки данных для кумулятивного графика с помощью Gnuplot

Пометить точки данных в Gnuplot очень просто, в этом примере я использую третий столбец в качестве меток для этого набора данных (data.txt):

 1 -22 "Event 0"
 2 -139.7 "Event 3"
 3 -11 "Event 7"
 4 -35.2 "Event 6"
 5 -139.7 "Event 2"
 6 -139.7 "Event 4"
 7 -84.7 "Event 1"
 8 -22 "Event 9"
 9 -64.9 "Event 8"
 10 -38.5 "Event 5"

gnuplot> plot 'data.txt' u 1:2, "" u 1:2:3 w labels rotate offset 1

Вот результат (для этой цели я не полировал): введите здесь описание изображения

Однако мне нужны точки данных, построенные по совокупной сумме:

gnuplot> plot 'data.txt' u 1:2 smooth cumulative

введите здесь описание изображения

Теперь, как я могу пометить точки в их новых "координатах"? Что-то вроде этого не работает (я хочу, чтобы метки были внизу в каждом колене кумулятивной кривой):

gnuplot> plot 'data.txt' u 1:2 s cum, "" u 1:2:3 s cum w labels offset 1

введите здесь описание изображения

Результат должен выглядеть примерно так (здесь вручную вырезано и размещено с помощью Gimp): введите здесь описание изображения


person smartmic    schedule 31.03.2016    source источник
comment
Пожалуйста, опубликуйте образец ваших данных. В частности, было бы полезно знать, как выглядят ваши ярлыки. Способ сделать это будет во многом зависеть от того, как они выглядят.   -  person Matthew    schedule 01.04.2016
comment
Я согласен с @Matthew: с тем, что вы пишете, невозможно догадаться, как вы решаете, какая метка напечатана рядом с накопленной точкой.   -  person Joce    schedule 01.04.2016
comment
Извините, теперь я попытался объяснить это более подробно и на небольшом примере (не мой реальный вариант использования, а 1: 1, переносимый из Gnuplot).   -  person smartmic    schedule 01.04.2016
comment
Можете ли вы привести пример того, что вы хотите? Просто используйте программу редактирования графики, чтобы нарисовать метки на кумулятивной кривой (второй график), чтобы показать, как вы хотите, чтобы они закончились.   -  person Matthew    schedule 02.04.2016
comment
@smartmic Мой ответ должен сработать. Исходное решение, которое я опубликовал, не сработало, но я не смог его протестировать, потому что вы не опубликовали свои данные. Как другие просили выше, в будущем не забудьте прикрепить данные, которые позволят другим пользователям воспроизвести вашу проблему, это значительно облегчит нам тестирование решений.   -  person Miguel    schedule 02.04.2016
comment
@Miguel Ваш ответ выглядит многообещающе, но я не смог его воспроизвести. Там написано line 7: duplicated or contradicting arguments in plot options. Кстати, данные приведены в первых 10 строках фрагмента кода.   -  person smartmic    schedule 02.04.2016
comment
@smartmic Извините за идиотизм, я все это время думал о варианте smooth frequency. Ваши данные в порядке. Попробуйте мое решение сейчас.   -  person Miguel    schedule 02.04.2016


Ответы (1)


Вы можете построить свой кумулятивный график в файл, а затем использовать эти измененные данные, как если бы вы использовали обычный файл данных. Чтобы получить доступ к меткам, можно использовать команду вставки и использовать дополнительные столбцы:

set table "cumulative_labels"
plot 'data.txt' u 1:2:3 smooth cumulative w labels
set table "cumulative_data"
plot 'data.txt' u 1:2 smooth cumulative
unset table
plot 'cumulative_data' u 1:2 w l, \
"< paste cumulative_labels cumulative_data" u 4:5:3 w labels offset 1

Редактировать:

Это можно сделать только с помощью gnuplot, без промежуточных файлов, но без опции smooth cumulative:

sum = 0.
plot "data.txt" u 1:2 s cum, "" u (sum = sum + $2, $1):(sum):3 w labels offset 1
person Miguel    schedule 01.04.2016
comment
Для человека, который проголосовал за это: в будущем, пожалуйста, напишите, в чем проблема, в разделе комментариев. Я уже исправил это, но мне потребовалось некоторое время, чтобы понять, что решение не работает. Понижение без комментариев, указывающих на проблему, не очень полезно. - person Miguel; 02.04.2016
comment
Это работает, спасибо. Минус в том, что это подразумевает 2 временных файла и внешнюю системную команду. Кто-нибудь может придумать чисто внутреннее решение gnuplot? - person smartmic; 03.04.2016
comment
@smartmic Использование smooth часто мешает параметрам стиля, как в вашем случае. Решения, которые я обычно использую сам, и те, которые я чаще всего видел у других, включают в себя сброс данных во внешние файлы и/или использование внешних команд. Тем не менее, вы можете сделать сумму самостоятельно, проанализировав данные на лету (в отличие от функции smooth cumulative. См. мое редактирование, чтобы узнать, как это сделать. - person Miguel; 03.04.2016
comment
@smartmic Gnuplot — это не инструмент обработки данных, а программа для построения графиков. Для удобства он предоставляет некоторые полезные и общие операции. Для более продвинутой обработки gnuplot опирается на свою способность передавать данные через другие программы или сценарии в духе инструментов командной строки UNIX. Вы не должны обвинять gnuplot в том, для чего он не предназначен. Если вам нужно больше, используйте octave, scilab, matplotlib,... - person Christoph; 03.04.2016