#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
Результат: