我有一个问题,想在gnuplot中用矢量场绘制一些三维贴图,事情是这样的,我想绘制梯度图,然后在地图上方绘制一个矢量场。我有这样的代码来做。
####
reset
clear
set title '{/:Bold Retrato de fase b=1.120}' font ",18"
set xlabel "{/:Bold x1}"
show xlabel
set xrange[0:1]
set ylabel "{/:Bold x2}"
show ylabel
set yrange [0:1]
set multiplot
set multiplot layout 1,1
set origin 0,0
set palette defined ( 0 'white', 1 'green', 3 'blue' )
set pm3d map
set pm3d depthorder hidden3d
set key top left
set key Left
set samples 100,100
set style increment default
set style fill transparent
set arrow from 1,0 to 0,0.7692307692 nohead front
set arrow from 0,1 to 0.7692307692,0 nohead front
set object circle at graph 0,1 radius char 1 front \
fillcolor rgb 'black' fillstyle solid noborder
set object circle at graph 1,0 radius char 1 front \
fillcolor rgb 'black' fillstyle solid noborder
set pm3d
splot "phase_portrait.txt" u 1:2:5 notitle w pm3d
unset pm3d
plot "arrows.txt" u 1:2:3:4 w vectors filled head lc rgb 'black' notitle
####
这是phase_portrait.txt档案中的几行代码 (每次x变化时我都会在档案中空一行):
0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.010000 0.000000 0.022222 0.117624
0.000000 0.020000 0.000000 0.022222 0.230543
0.000000 0.030000 0.000000 0.022222 0.338829
0.000000 0.040000 0.000000 0.022222 0.442552
0.000000 0.050000 0.000000 0.022222 0.541785
0.000000 0.060000 0.000000 0.022222 0.636598
0.000000 0.070000 0.000000 0.022222 0.727063
而这些是arrows.txt中的。
0.000000 0.000000 0.000000 0.000000
0.000000 0.100000 0.000000 0.022222
0.000000 0.200000 0.000000 0.022222
0.000000 0.300000 0.000000 0.022222
0.000000 0.400000 0.000000 0.022222
0.000000 0.500000 0.000000 0.022222
0.000000 0.600000 0.000000 0.022222
0.000000 0.700000 0.000000 0.022222
无论我怎么做,向量的输出都与梯度图不匹配。我添加了一张输出的图像。
这里不需要使用 multiplot
而无需使用 splot
.下面的最小例子生成一些测试数据来说明.希望你能根据自己的需要调整代码。
编码
### overlay of map and vectors
reset session
# create some test data for map
set samples 100
set isosamples 100
set table $Data
plot '++' u 1:2:($1*$2) w table
unset table
# create some test data for vectors
set samples 10
set isosamples 10
set table $Vectors
plot '++' u 1:2:($1/sqrt($1**2+$2**2)):($2/sqrt($1**2+$2**2)) w table
unset table
set xrange[-5:5]
set yrange[-5:5]
set palette defined ( 0 'white', 1 'green', 3 'blue' )
plot $Data u 1:2:($1*$2) w image, \
$Vectors u 1:2:3:4 w vec lc rgb "black" notitle
### end of code
结果: