Отображение маркеров определенных значений на линейном графике Gnuplot

У меня есть данные для CDF в файле, который выглядит следующим образом:

0.033 0.0010718113612
0.034 0.0016077170418
0.038 0.0021436227224
...  ...
...  ...
0.847 0.999464094319
0.862 1.0

Первый столбец — это значение по оси X, а второй столбец — это значение CDF по оси Y. Я установил стиль линии следующим образом:

set style line 1 lc rgb 'blue' lt 1 lw 2 pt 7 ps 0.75   # --- blue

и впоследствии постройте линию со следующим:

plot file1 using 1:2 title 'Test Line CDF' with linespoints ls 1

Все это работает нормально, проблема, похоже, в том, что мой файл CDF довольно большой (около 250 строк), и Gnuplot нанесет маркер/точку (в данном случае круг) для каждой точки данных. Это приводит к очень «плотной» линии из-за чрезмерной концентрации маркеров, так что основная линия почти не видна, как показано на примере изображения ниже:

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

Как я могу выборочно рисовать маркеры, чтобы вместо того, чтобы располагать их на всех точках данных, я отображал их после каждых 50 точек данных, не уменьшая количество точек данных (что, как я полагаю, будет делать "every n" в команде построения графика) в моем файле данных или уменьшить размер маркера?


person Zahaib Akhtar    schedule 17.04.2014    source источник
comment
Я не уверен, что понимаю ваш вопрос: вы хотите использовать команду every n только для частей вашей кривой? В противном случае, почему бы не сработать пропуск every n и уменьшение размера маркера?   -  person Schorsch    schedule 17.04.2014
comment
@Schorsch, в основном, если вы используете every n, то вы фактически теряете точки на своем графике, в результате чего CDF выглядит немного квантованным, то есть теряет красивую кривую.   -  person Zahaib Akhtar    schedule 17.04.2014


Ответы (3)


Нет необходимости использовать две команды построения графиков, просто используйте параметр pointinterval:

plot 'data' pointinterval 5 with linespoints

Это отображает каждый сегмент линии, но только каждый символ пятой точки.

Большим преимуществом является то, что вы можете контролировать поведение с помощью set style line:

set style line 1 lc rgb 'blue' lt 1 lw 2 pt 7 ps 0.75 pi 5
plot 'data' w lp ls 1
person Christoph    schedule 18.04.2014
comment
Хорошее решение. Интересно, однако, как я могу построить фиксированное количество точек вместо построения каждые 5?. Это возможно? - person Nikko; 09.02.2015
comment
@Никко Не напрямую. Вы можете использовать статистику, чтобы получить количество записей, а затем рассчитать шаг: stats 'file.dat' using 2; ev = floor(STATS_records); plot 'file.dat' pi ev. - person Christoph; 10.02.2015

Вы можете построить одну и ту же функцию дважды, один раз только с линиями, а затем с точками через каждые n точек. Это позволит привлечь меньше точек без уменьшения количества сегментов. Я думаю, это то, чего вы хотите достичь. В этом примере я сделал set table "data" ; plot sin(x), чтобы сгенерировать числовую выборку функции sin(x).

Что у вас есть на данный момент:

plot "data" with linespoints pt 7

который дает

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

Теперь вы можете сделать следующее:

plot "data" with lines, "data" every 10 with points pt 7 lc 1

который дает то, что вы хотите:

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

Вы можете изменить стиль в соответствии с вашими потребностями.

person Miguel    schedule 17.04.2014
comment
Действительно, я решил это, опубликовав свое решение ниже. Это именно то, что я сделал. - person Zahaib Akhtar; 17.04.2014

Хотя @Miguel опередил меня, но я также публикую свое решение ниже:

Идея состоит в том, чтобы один раз нарисовать линию, а затем нарисовать точки с помощью спецификатора «каждое n». Я изменил свой собственный скрипт Gnuplot следующим образом. Своеобразный хак, но работает:

set style line 1 lc rgb 'blue' lt 1 lw 2 pt 7 ps 0   # --- blue

plot file1 using 1:2 title '' with linespoints ls 1, "" using 1:2 every 20 title 'Test Line CDF' with points ls 1 ps 0.75

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

Это сохраняет красивую кривую, не квантовая ее слишком грубо, а также сохраняет точки намного лучше разнесенными.

person Zahaib Akhtar    schedule 17.04.2014