2016-10-22 4 views
0

Я пытаюсь построить пунктирную линию в пределах SPLOT с помощью следующего кода в Gnuplot 4,6 4 номера патчей:Gnuplot: Изменение плотности пунктирной линии в SPLOT

set terminal "pdfcairo" enhanced dashed size 15,10 
set pm3d map 
set output "test.pdf" 
splot 'map.dat' using 1:($2/1000):3 notitle, \ 
    'line1.dat' using 1:($2/1000):1 notitle with lines ls 2, \ 
    'line2.dat' using 1:($2/1000):1 notitle with lines ls 2 
unset output 

Теплота работает карта и так же line1.dat , Однако вторая строка выглядит сплошной. Разница в том, что line1.dat имеет 70 записей, а line2.dat имеет 900. Вторая строка имеет прыжок между двумя точками и там она пунктирна.

Кто-нибудь знает, как я могу изменить плотность точек так, чтобы вся строка выглядела пунктирной. Изменение исходного файла данных не является вариантом.

Спасибо за вашу помощь,

голосующих

EDIT:

Один из способов я нашел

splot 'line2.dat' every ... 

, но которые могут получить неудобные в прыжках в данных.

ответ

1

Команда (s)plot 'line.dat' with lines первые участки с точки данных, а затем соединяет точки данных с использованием линий с соответствующей LineStyle. Если точки данных слишком близки друг к другу, нет места для некоторых промежутков, когда используется пунктирная линия.

Для отображения пунктирной/пунктирной линии вы можете попытаться заменить точки на функцию или уменьшить количество точек.

  • Попробуйте пунктирные линии вместо пунктирных линий. Linestyle и linecolor могут быть установлены независимо: splot 'line.dat' with lines ls 0 lc 2. Для такого подхода может оказаться слишком много 900 баллов.

  • Установка функции будет работать, но, вероятно, слишком сложно найти подходящую функцию.

  • Опция every уменьшает количество очков.

  • Другая возможность уменьшить количество точек будет заключаться в том, чтобы интерполировать точки, используя опцию smooth. Для этого требуется временный файл и работает следующим образом:

    # [prepare plot] 
    set samples 100 
    set table "line2.dat.tmp" 
    plot 'line2.dat' using 1:($2/1000) smooth mcsplines with lines ls 2 
    unset table 
    
    set terminal "pdfcairo" enhanced dashed size 15,10 
    set pm3d map 
    set output "test.pdf" 
    
    # [plot] 
    splot 'map.dat' using 1:($2/1000):3 notitle, \ 
        'line1.dat' using 1:($2/1000):1 notitle with lines ls 2, \ 
        'line2.dat.tmp' using 1:2:1 notitle with lines ls 2 
    
    unset output 
    

В [подготовить сюжет] раздел временный файл «line2.dat.tmp» создан, который содержит точки данных интерполяционных line2.dat. Вы должны сыграть с set samples, чтобы получить нужное количество очков. В примере мы имеем 100 эквидистантных точек вместо 900 точек с разным расстоянием. Опция smooth mcsplines сохраняет монотонность и выпуклость исходных точек данных, см. help smooth mcsplines в оболочке gnuplot.

В разделе [plot] исходный «lines2.dat» заменяется интерполированными данными.

Этот подход работает, если исходные данные являются достаточно гладкими, так что замена 900 точек на 100 пунктов не пропускает важную информацию. Возможно, вы хотите построить как «lines2.dat», так и «lines2.dat.tmp» на одной диаграмме для их сравнения.

+0

Благодарим за помощь. Для перехода в данные я использовал три «каждый» (один для первой части, один для правильного перехода, второй - для второй). – noes

0

записей пользователей every ключевым словом, например:

'line2.dat' every 20 using 1:($2/1000):1 notitle with lines ls 2 

 Смежные вопросы

  • Нет связанных вопросов^_^