2013-08-14 3 views
2

У меня вопрос о pm3d и gnuplot. Я хочу построить две разные поверхности с двумя разными типами pm3d. Как я могу это сделать? Является ли это возможным? Я попытался использовать мультиплекс, но в этом случае поверхности будут перекрываться, и я не могу повернуть график. Любая помощь будет оценена, спасибо!Gnuplot, pm3d и поверхности

+1

Единственный способ, которым я могу думать, использовать четыре столбца для 'splot', в этом случае четвертый столбец представляет собой отдельное серое значение, отображенное палитрой. Затем вам нужно создать единую палитру, содержащую одну палитру в одной половине, а другую палитру в другой половине, а затем сопоставить две поверхности, чтобы использовать только соответствующую половину палитры. Это возможно, но требует некоторых возиться :-) – Christoph

ответ

3

Вот пример с данными псевдо:

reset 
set xrange[0:1] 
set yrange[0:1] 
set cbrange[0:1] 
set palette defined (0 'green', 1 'red', 1 'blue', 2 'white') 
set isosamples 100 
set samples 100 
set pm3d depthorder 
set view 60,335 
splot '++' using 1:2:2:(0.5*$2) with pm3d title 'red -> green',\ 
     '++' using 1:2:1:(0.5*(1+$1)) with pm3d title 'blue -> white' 

Результат: enter image description here

Чтобы использовать данные вместо этих данных псевдо сгенерированные «++» вы можете использовать stats для определения диапазонов данных и масштабируйте цвета поверхности соответственно [0:0.5] для одного, и до [0.5:1] для другого.

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

reset 
# generate the sphere data 
set samples 100 
set isosamples 100 
set parametric 
set urange[0:2*pi] 
set vrange[0:pi] 
set table 'spheres.dat' 
r = 0.25 
splot r*cos(u)*sin(v),r*sin(u)*sin(v),r*cos(v) with lines 
unset table 
unset parametric 

# plot the generated data set 
set xrange[-1:1] 
set yrange[-1:1] 
set cbrange[-1:3] 
set palette defined (0 'black', 1 'green', 1 'black', 2 'red') 

set pm3d depthorder 
unset colorbox 
unset key 
set ticslevel 0 
set view 19,34 
splot 'spheres.dat' using ($1-0.5):2:3:($3/r) with pm3d, \ 
     '' using ($1+0.5):2:3:($3/r + 2) with pm3d 

Результат является enter image description here

+0

Спасибо. В моем случае я должен построить две поверхности, но с более чем одним значением z. Например, я хочу построить две сферы в плоскости xy, и я хочу назначить красный цвет одному, а зеленый - другому. –

+0

Я хочу построить сферы с функциями, а не с файлом данных –

+0

@PaoloUsai Ну, у меня также есть несколько значений 'z'. Вы должны немного прочитать в руководстве о специальном имени файла '++' и инструкции 'using'. И если сферы будут полностью красными или затененными, например. от красного до белого? – Christoph