Как построить график из нескольких источников?

#gnuplot #octave

#gnuplot

Вопрос:

Изображение ниже — это пример, который мне нужно воспроизвести, и я не знаю, с чего начать.

вывод

Кто-нибудь может мне посоветовать? Я немного знаком с gnuplot. Как мне создать несколько источников?

Комментарии:

1. Вы отметили как gnuplot, так и Octave. Пожалуйста, выберите один. Ответы для двух пакетов будут сильно отличаться и несовместимы.

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

3. Я хочу gnuplot.

4. Каждый профиль, который у меня есть, представляет собой значение X и Y… где Y — высота геометрии, а X — скорость.

5. Что именно вам нужно воспроизвести из примера? Это фактические линии на каждой панели или просто макет (3 сложенные панели с одинаковыми диапазонами x и y)?

Ответ №1:

Не зная вашей структуры данных, трудно сделать какие-либо подходящие предложения. Поскольку, похоже, OP больше не заинтересован в ответе, я сделаю предложение для других. И поскольку данные не указаны, я кое-что предположу.

Данные примера содержат несколько профилей, разделенных двумя пустыми столбцами. Здесь значения y (z-значения на графике операционной системы) находятся в столбце 1 (диапазон от 0 до 2), а значения x (x-значения на графике операционной системы) находятся в столбце 2 (диапазон от 0 до 1).

У вас есть условное смещение и масштабирование. Итак, тогда просто реализуйте это для ваших данных x, y, используя тернарный оператор, проверьте help ternary .

  • нарисуйте прямоугольник и замените метки ytic 1 -> 0 и 3 -> 2
  • псевдоколонке -2, то есть номеру блока данных (подблока) на основе нуля (проверка pseudocolumns ), присваивается значение x0 , которое используется в качестве смещения по x.
  • если x0<=0 масштабируйте ваши значения y на 1, в противном случае на 1,5, и смещайте ваши значения на 1 или 0 соответственно.

Скрипт:

 ### conditional offsets and scaling
reset session

# create some test data
set samples 50
set table $Data
    f(x,a) = a*(-(x-1)**2 1)   (rand(0)*0.2-0.1)*x*(x-2)
    do for [i=-3:15] {
        plot [0:2] ' ' u 1:(f($1,(i 4)/20.))   w table
        plot ' ' u ("") every ::0::2 w table
    }
unset table

set obj 1 rect from first -3, first 0 to first 0, first 1  fc "black" fs pattern 7

yScale(x)  = x<=0 ? 1 : 1.5
yOffset(x) = x<=0 ? 1 : 0

set xrange[-3:16]
set xtic 5 out add ("" -2)     # remove xtic at -2
set mxtics 5
set yrange[0:3]
set ytic 1 out add ("" 0, "0" 1, "" 2, "2" 3)  # overwrite y-tics
set mytic 2
set key noautotitle
set grid x,mx ls 1 lc "black"

plot $Data u (x0=column(-2)-3, $2 x0):($1*yScale(x0) yOffset(x0)):-2 w l lc var
### end of script
  

Результат:

введите описание изображения здесь