Отображение маркеров на определенных значениях в линейном графике 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" в графике команды будет делать) в моем файле данных или уменьшить размер маркера?

3 ответа

Решение

Нет необходимости использовать две команды plots, просто используйте 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

Хотя @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

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

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

Вы можете построить одну и ту же функцию дважды, один раз только с линиями, а затем с точками через каждые 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

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

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

Другие вопросы по тегам