Я знаю, что это старый вопрос, но, вдохновленный той же записью gnuplotting , я решил попробовать что-то, что действительно будет работать на gnuplot 5.2.7
.Это на самом деле доказательство концепции !
Я понял, что даже при использовании depthorder base
правильный z-порядок достигается просто путем создания граней куба в определенной последовательности.
Для иллюстрации я использовал следующий файл данных для построения "кубов" .
0.1 0.1 0.0
0.9 0.1 0.0
0.9 0.1 1.0
0.1 0.1 1.0
0.1 0.1 0.0
0.9 0.1 0.0
0.9 0.9 0.0
0.9 0.9 1.0
0.9 0.1 1.0
0.9 0.1 0.0
0.9 0.1 1.0
0.9 0.9 1.0
0.1 0.9 1.0
0.1 0.1 1.0
0.9 0.1 1.0
0.9 0.1 0.0
0.9 0.9 0.0
0.1 0.9 0.0
0.1 0.1 0.0
0.9 0.1 0.0
Используя этот код ...
reset
set terminal pngcairo font "Ubuntu,10" size 1000,800
set output "3D_Graph.png"
set tics out nomirror
unset key
set xyplane at 0
unset colorbox
set arrow 1 from 0.55,0.40,0 to 1.45,0.4,0 nohead
set arrow 2 from 0.55,0.32,0 to 0.55,0.47,0 nohead
set arrow 3 from 1.45,0.32,0 to 1.45,0.47,0 nohead
set arrow 4 from 1.60,0.55,0 to 1.60,1.45,0 nohead
set arrow 5 from 1.55,0.55,0 to 1.65,0.55,0 nohead
set arrow from 1.55,1.45,0 to 1.65,1.45,0 nohead
set style textbox opaque noborder fillcolor rgb "white"
set label 1 "0.9" at 0.95,0.2,0.0 boxed
set label 2 "0.9" at 1.70,1.0,0.0 boxed
set style line 1 lw 1.5 lc rgb "#fde725"
# viridis colormap
set palette defined(\
1 "#440154",\
2 "#472c7a",\
3 "#3b518b",\
4 "#2c718e",\
5 "#21908d",\
6 "#27ad81",\
7 "#5cc863",\
8 "#aadc32",\
9 "#fde725"\
)
# ================================================================================
set multiplot layout 2,2
set xtics 1
set ytics 1
set view equal xyz
set view ,,1.5,1
set cbrange [0:1]
set grid ls -1 lc "gray"
set pm3d depthorder hidden3d
set pm3d implicit
unset hidden3d
set title "{/:Bold single cube}"
splot [0:2][0:2][0:1] "cube_points.dat" u ($1+0.5):($2+0.5):($3):(0) w l ls 1
unset for [i=1:6] arrow i
unset for [i=1:2] label i
# --------------------------------------------------------------------------------
set grid xtics ytics ztics vertical layerdefault ls -1 lc "gray"
set view equal xy
set view ,,1.75,0.55
set xrange [0.25:6.6]
set yrange [0.25:4.0]
set zrange [0:100]
set ztics 20
set cbrange [0:*]
set object polygon from \
graph 0, 0, 0 to \
graph 1, 0, 0 to \
graph 1, 1, 0 to \
graph 0, 1, 0 to \
graph 0, 0, 0 fc rgb "gray" fs transparent solid 0.50 noborder
set pm3d depthorder base border lw 0.5
set title "{/:Bold pm3d with depthorder base border lw 0.5}"
splot \
"cube_points.dat" u ($1+0.5):($2+0.5):($3*15):(1) w pm3d,\
"cube_points.dat" u ($1+0.5):($2+1.5):($3*65):(1) w pm3d,\
"cube_points.dat" u ($1+0.5):($2+2.5):($3*85):(1) w pm3d,\
"cube_points.dat" u ($1+1.5):($2+0.5):($3*30):(2) w pm3d,\
"cube_points.dat" u ($1+1.5):($2+2.5):($3*75):(2) w pm3d,\
"cube_points.dat" u ($1+1.5):($2+1.5):($3*50):(2) w pm3d,\
"cube_points.dat" u ($1+2.5):($2+0.5):($3*30):(3) w pm3d,\
"cube_points.dat" u ($1+2.5):($2+1.5):($3*40):(3) w pm3d,\
"cube_points.dat" u ($1+2.5):($2+2.5):($3*60):(3) w pm3d,\
"cube_points.dat" u ($1+3.5):($2+0.5):($3*20):(4) w pm3d,\
"cube_points.dat" u ($1+3.5):($2+1.5):($3*50):(4) w pm3d,\
"cube_points.dat" u ($1+3.5):($2+2.5):($3*85):(4) w pm3d,\
"cube_points.dat" u ($1+4.5):($2+0.5):($3*25):(5) w pm3d,\
"cube_points.dat" u ($1+4.5):($2+1.5):($3*40):(5) w pm3d,\
"cube_points.dat" u ($1+4.5):($2+2.5):($3*50):(5) w pm3d,\
"cube_points.dat" u ($1+5.5):($2+0.5):($3*15):(6) w pm3d,\
"cube_points.dat" u ($1+5.5):($2+1.5):($3*30):(6) w pm3d,\
"cube_points.dat" u ($1+5.5):($2+2.5):($3*40):(6) w pm3d
# --------------------------------------------------------------------------------
set pm3d depthorder base lighting noborder
set title "{/:Bold pm3d with depthorder base lighting noborder}"
replot
# --------------------------------------------------------------------------------
set pm3d depthorder base lighting border lw 0.5
set title "{/:Bold pm3d with depthorder base lighting border lw 0.5}"
replot
unset multiplot
... Iсмог достичь этого результата:
![3D boxbar using gnuplot](https://i.stack.imgur.com/sOqfH.png)
Работает даже при высоком ракурсе:
![3D horizontal rotation](https://i.stack.imgur.com/pvcgl.gif)
![3D vertical rotation](https://i.stack.imgur.com/YhjUE.gif)
Конечно, этот код не может читать файлы данных x y z
-типа или создавать трехмерные столбчатые диаграммы, но это только начало.