построение матричных данных в виде точек - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть данные, которые выглядят так:

label1: <set of increasing numbers 1..500>
label2: <set of increasing numbers 1..500>

и т. Д.

Я хотел бы сделать из этого изображение, которое будет выглядеть примерно так:

label1    ...           ...............         .... .   . 
label2      ................           .............. 
etc

           1 2 3 ...                                       500

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

1 Ответ

0 голосов
/ 21 декабря 2018

может быть, нам нужен визуальный пример, чтобы узнать, чего вы действительно хотите.Следующим должен быть код для копирования и вставки.Если вы читаете свои данные из файла, замените $Data в команде plot на ваше имя файла, например, 'Data.dat'.Приближается ли это к тому, что вы хотите?

reset session

$Data <<EOD
label1  label2  label3
1   3   6
2   6   9
20  23  31
21  26  34
22  25  29
56  50  44
57  58  55
58  60  70
59  65  85
EOD

set colorsequence classic
set key top left
set yrange [0.5:3.5]
plot for [i=1:*] $Data u i:(i):ytic(columnhead(i)) with points pointtype 7 pointsize 2 notitle

, что должно привести к:

enter image description here

Добавление: следующий код являетсянекрасивый обходной путь для преобразования данных с помощью gnuplot.Результат построения должен быть в основном таким же, как указано выше, за исключением того, что я сделал строки, отличающиеся по длине, удалив и добавив некоторые точки.

### plotting rows with different length
reset session

$DataInRows <<EOD
label1  1   2   20  21  22  56  57  58  59
label2  3   6   23  26  25  50  58
label3  6   9   31  34  29  44  55  70  88  90
EOD

stats $DataInRows u 0 nooutput   # get the number of rows
RowCount = STATS_records
array Rows[RowCount]   # define an array

# put rows as string into the array
set table $Dummy
    MaxColCount = 0
    set datafile separator "\n"        # full lines 
    # get the lines into array and at the same time determine the maximum number of columns
    plot $DataInRows u (Rows[$0+1]=stringcolumn(1), \
        MaxColCount = words(Rows[$0+1]) > MaxColCount ? words(Rows[$0+1]) : MaxColCount) \
        with table 
    set datafile separator whitespace  # set back to default
unset table
print MaxColCount

set print $Data  # print into dataset
do for [j=1:MaxColCount] {
    tmp = ''
    do for [i=1:RowCount] {
        tmp = i > 1 ? tmp."\t".word(Rows[i],j) : word(Rows[i],j)
    }
    print tmp
}
set print 

set colorsequence classic
set yrange [0.5:3.5]
plot for[i=1:RowCount] $Data u i:(i):ytic(columnhead(i)) w p pt 7 ps 2 notitle
### end of code
...