gnuplot: как рисовать несвязанные линии с помощью splot? - PullRequest
1 голос
/ 04 апреля 2019

Это не дубликат Как нарисовать отдельные отрезки линии в gnuplot, используя splot .Вопрос немного другой, но я также хотел бы выделить отдельные линии с splot.Ссылка выше говорит о том, что вы должны ввести 2 пустые строки в ваших данных.Вот что я делаю при создании $Data1.

Вопрос: Почему $Data1 подключен, а $Data2 отключен?Я хочу, чтобы $Data1 также был отключен.В чем дело?Есть идеи?Ошибка или функция?

Редактировать:

@ Ответ Итана в основном приводит к отключенным линиям.Но все же есть некоторая несогласованность.Когда вы создаете файл данных Data3.dat, кажется, что достаточно создать его, просто напечатав один \n, но в файле вы увидите два \n.Зачем?Я в замешательстве.

Код:

### splot disconnected lines
reset session
set border 0
unset tics

set print $Data1
do for [i=1:3] {
    print sprintf("%.3f %.3f %.3f",rand(0),rand(0),rand(0))
    print sprintf("%.3f %.3f %.3f",rand(0),rand(0),rand(0))
    print "\n"; # print ""
}
set print

$Data2 <<EOD
0.266 0.838 0.173
0.413 0.985 0.102


0.173 0.879 0.478
0.375 0.748 0.659


0.605 0.365 0.966
0.001 0.426 0.129
EOD

FILE = "Data3.dat" 
set print FILE
do for [i=1:3] {
    print sprintf("%.3f %.3f %.3f",rand(0),rand(0),rand(0))
    print sprintf("%.3f %.3f %.3f",rand(0),rand(0),rand(0))
    print "\n"
}
set print


splot \
    $Data1 u 1:2:3 w lp pt 7 lc rgb "red" t "Why is $Data1 connected?", \
    $Data2 u 1:2:3 w lp pt 7 lc rgb "web-green" t "$Data2 disconnected", \
    FILE   u 1:2:3 w lp pt 7 lc rgb "blue" t 'Why is FILE with just one "\\n" disconnected'
### end of code

Результат: $Data1

0.949 0.287 0.592
0.547 0.876 0.294


0.468 0.930 0.703
0.294 0.990 0.919


0.038 0.550 0.467
0.222 0.390 0.941

Сюжет:

enter image description here

Ответы [ 3 ]

2 голосов
/ 04 апреля 2019

Вы создаете только одну пустую строку, а не две, между блоками данных в $ data1

set print $Data1
do for [i=1:3] {
    print sprintf("%.3f %.3f %.3f",rand(0),rand(0),rand(0))
    print sprintf("%.3f %.3f %.3f",rand(0),rand(0),rand(0))
    print "\n"
    print "\n"   # 2 blank lines required
}
set print
0 голосов
/ 05 апреля 2019

Вопрос на самом деле не о splot, а: Сколько пустых строк я получу?

Подводя итог тому, что я понял из комментариев и ответов @ Итана,

Некоторые тестовые коды:

### How many empty lines do I get?
reset session

set print $Data1; print "1 Dataline"; print "";      print "2 Dataline";
set print $Data2; print "1 Dataline"; print "\n";    print "2 Dataline";
set print $Data3; print "1 Dataline"; print "\n\n";  print "2 Dataline";
set print $Data4; print "1 Dataline"; print "\n\nX"; print "2 Dataline";

set print "Data1.txt"; print "1 Dataline"; print "";      print "2 Dataline";
set print "Data2.txt"; print "1 Dataline"; print "\n";    print "2 Dataline";
set print "Data3.txt"; print "1 Dataline"; print "\n\n";  print "2 Dataline";
set print "Data4.txt"; print "1 Dataline"; print "\n\nX"; print "2 Dataline";
set print    

print $Data1
print $Data2
print $Data3
print $Data4
### end of code

Результат:

A = print to a datablock (how gnuplot handles the datablock)
B = print datablock to gnuplot console (how gnuplot displays the datablock)
C = print to datafile

Blank lines:
                  5.2          5.3
               A   B   C    A   B   C    
print ""       1   1   1    1   1?  1?
print "\n"     1   2   2    1   1?  1?
print "\n\n"   1   3   3    2   2?  2?
print "\n\nX"  1   2   2    2   2?  2?

На мой взгляд, столбцы A, B, C должны быть идентичны. Ну, они не в 5.2 (внутренние действия gnuplot отличаются от того, что вы видите), это была моя настоящая "проблема". Поскольку у меня нет версии 5.3, я не могу проверить B и C, поэтому эти столбцы являются лишь предположением, пожалуйста, исправьте их, если я ошибаюсь. На мой взгляд, они должны быть идентичны столбцу А.

0 голосов
/ 05 апреля 2019

Версия 5.2.6

gnuplot> set print $D; print ""
gnuplot> set print $E; print "\n"
gnuplot> set print $F; print "\n\n"
gnuplot> set print $G; print "\n\nX"
gnuplot> show var $

        Variables beginning with $:
        $D = <1 line data block>
        $E = <1 line data block>
        $F = <1 line data block>
        $G = <1 line data block>

Версия 5.3

gnuplot> set print $D; print ""
gnuplot> set print $E; print "\n"
gnuplot> set print $F; print "\n\n"
gnuplot> set print $G; print "\n\nX"
gnuplot> show var $

        Variables beginning with $:
        $D = <1 line data block>
        $E = <1 line data block>
        $F = <2 line data block>
        $G = <3 line data block>
...