Поверхностный график gnuplot 3d

У меня есть текст из точек x, y, z, с помощью которых я хочу нарисовать трехмерный поверхностный график. Однако код, который вычисляет эти точки, иногда дает координаты нулевого значения (точнее, 0,000000000000000000e + 00). Я пытался игнорировать их, используя

set datafile missing '0.000000000000000000e+00'. 

В результате график поверхности продолжается в направлении точки (0,0,0). В случае ненулевых значений график работает нормально. Вот скрипт gnuplot, который я сейчас использую:

set title "Thermal efficiency versus maximum cycle pressure and expander inlet temperature"

set grid

set key top left
#set key off

set view 60,60

set xlabel "phigh [MPa]"
set ylabel "T3 [oC]"
set zlabel "nth [-]"

#set xrange[0.0:0.0]
#set yrange[0.0:0.0]
#set zrange[0.0:0.0]

set datafile missing '0.000000000000000000e+00'

set dgrid3d 100,100
#set hidden3d 

#set palette model CMY rgbformulae 7,5,15
set palette rgbformulae 33,13,10

#splot "performance_parameters.txt" using ($1/1000000.0):($2-273.15):($3) notitle with points palette pointsize 1 pointtype 7

splot "performance_parameters.txt" using ($1/1000000.0):($2-273.15):($3) notitle with lines palette  

#splot "performance_parameters.txt" using ($1/1000000.0):($2-273.15):($3) notitle with points palette pointsize 1 pointtype 7

Я хотел бы знать, есть ли другой способ пропустить строки с нулевыми координатами.

пример рабочего сюжета

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

пример неработающего графика  введите описание изображения здесь

Заранее спасибо.


person Panus Kladus    schedule 26.06.2020    source источник


Ответы (1)


Если я set datafile missing "0.000000000000000000e+00", у меня все будет хорошо (gnuplot 5.2.8). Я предполагаю, что строка должна точно соответствовать значению строки в ваших данных. Что ж, другой подход - определить функции, которые возвращают NaN, если значение данных равно 0. Таким образом, левый график включает 0, а другие графики не включают 0.

Код:

### exclude data with 0 values
reset session

$Data <<EOD
1  1  0.1
1  2  0.3
1  3  0.2
2  1  0.5
2  2  1.3
2  3  1.2
0.000000000000000000e+00  0.000000000000000000e+00  0.000000000000000000e+00
3  2  0.9
3  3  0.7
EOD

set dgrid3d 20,20

myNonZero(col) = column(col) == 0 ? NaN : column(col)
unset colorbox

set multiplot layout 1,3

    splot $Data u 1:2:3 w l palette
    
    set datafile missing "0.000000000000000000e+00"
    splot $Data u 1:2:3 w l palette
    
    splot $Data u (myNonZero(1)):2:3 w l palette

unset multiplot
### end of code

Результат:

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

person theozh    schedule 26.06.2020
comment
Я извиняюсь за поздний ответ. Казалось бы, отсутствующий файл данных набора команд не работает так, как я думал. Он исключает точки после арифметической операции. Например, вместо того, чтобы читать $ 2, равное 0, он читает $ 2-273,15, что не равно нулю. Таким образом, он принимает во внимание соответствующие моменты. Теперь вопрос в том, как мне наложить ограничение на все три координаты, т.е. x ›0, y› 0, z ›0. Во всяком случае, ваш пост указал мне правильное направление. - person Panus Kladus; 26.06.2020