Нужно построить каждый n-й ряд в gnuplot - PullRequest
4 голосов
/ 04 марта 2012

Я использую gnuplot и у меня есть данные, которые имеют более 2 параметров. Я не хочу использовать трехмерные графики. Поэтому я разделю данные на несколько строк на одном графике.

Мои данные выглядят так, в одном случае:

    #k   #N   #time   
1   1   0.000556134 
2   1   0.00099 
4   1   0.00201011  
8   1   0.00376214  
16  1   0.00675843  
1   2   0.000717646 
2   2   0.000794106 
4   2   0.0016033   
8   2   0.0033602   
16  2   0.00795338  
1   4   0.000476448
...     ...     ... 

Первый - это количество потоков, которые я использую, второй - размер буфера, а последний - время использования этой операции.

Мне нужен один график, где размер буфера равен X, время Y и по одной строке для каждого «количества используемых потоков». Мой код до сих пор:

     reset
        set   autoscale # scale axes automatically
        unset log       # remove any log-scaling
        unset label     # remove any previous labels
        set xtic auto   # set xtics automatically
        set ytic auto   # set ytics automatically
        #set logscale x 2
        #set logscale y 2
        set rmargin 10
        set bmargin 5
        set tmargin 5 
        set key left top
        set title
        set term png giant size 1500, 800 crop

        set title "Adapter Stream Input" font "verdana, 20"
        set xlabel "Buffer Size" font "verdana, 20"
        set ylabel "Time in Seconds" font "verdana, 20"

        set key right bottom spacing 4 width 5 height 5 font "verdana, 15"

        set output "AdapterStreamInputTests.png"

        plot    "AdapterStreamInputTests.txt" using ($1 == 1 ? $2 : 1/0):($1 == 1 ? $3 : 1/0) title '1 Stream' with linespoints ls 1 linecolor rgb "blue", \
        "AdapterStreamInputTests.txt" using ($1 == 2 ? $2 : 1/0):($1 == 2 ? $3 : 1/0) title '2 Stream' with linespoints ls 1 linecolor rgb "red", \
        "AdapterStreamInputTests.txt" using ($1 == 4 ? $2 : 1/0):($1 == 4 ? $3 : 1/0) title '4 Stream' with linespoints ls 1 linecolor rgb "yellow", \
        "AdapterStreamInputTests.txt" using ($1 == 8 ? $2 : 1/0):($1 == 8 ? $3 : 1/0) title '8 Stream' with linespoints ls 1 linecolor rgb "brown", \
        "AdapterStreamInputTests.txt" using ($1 == 16 ? $2 : 1/0):($1 == 16 ? $3 : 1/0) title '16 Stream' with linespoints ls 1 linecolor rgb "pink"

set output

Моя главная проблема сейчас в том, что все графики правильные, но между линиями они не будут. Я прочитал из руководства под командой «использование» главу, что:

Следует отметить, что сюжет 'le', сюжет 'le', используя 1: 2, и сюжет 'le' с использованием ($ 1): ($ 2) может быть слегка отличным: 1) если в файле есть несколько строк с одним столбцом, а некоторые с двумя, первый будет изобретать значения х, когда они отсутствуют, второй будет спокойно игнорировать строки с одним столбец, а третий будет хранить неизмененное значение для строк с одним точка (так, чтобы на графике с линиями ни одна линия не соединяла точки через плохой момент); 2) если строка содержит текст в первом столбце, первый прервет сюжет по ошибке, но второй и третий должны спокойно пропустить мусор.

Я думаю, что я нахожусь в третьей категории, и нет никаких линий, потому что у каждого графика есть 4 недопустимых участка между ними, но я не могу найти способ исправить это.

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

1 Ответ

6 голосов
/ 05 марта 2012

Ну, есть два варианта для вас.

1.) Используйте каждую команду, как показано здесь , альтернативная ссылка (машина обратного хода)

2.) Используйте отсутствующий параметр, где вы, как и выше, используете нотацию?: Для добавления символа. Еще раз подробнее о замечательном неофициальном FAQ , альтернативная ссылка (обратная машина)

...