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