我想使用Matlab中常用的样式使用Gnuplot绘制3D直方图。 我遵循的步骤顺序是:
set palette defined ( 0 '#000090',\
1 '#000fff',\
2 '#0090ff',\
3 '#0fffee',\
4 '#90ff70',\
5 '#ffee00',\
6 '#ff7000',\
7 '#ee0000',\
8 '#7f0000')
set pm3d at s
set view map
splot 'test.dat' u 1:2:3
正如您在下面的数据中看到的,大多数条目都为零,这使得绘图非常蓝。在Matlab中,可以制作这种类型的直方图,零值具有白色。只有不为零的点具有上面调色板中的颜色。我希望这些点是白色的,因为这会强调实际的采样区域。
我想知道我们是否可以在Gnuplot那样做。我试图在数据文件中省略零,但它导致了一个尖角图。
此外,我在这里明确地修改了定义零值的调色板:
set palette defined ( 0 '#ffffff',\
1 '#000090',\
2 '#000fff',\
3 '#0090ff',\
4 '#0fffee',\
5 '#90ff70',\
6 '#ffee00',\
7 '#ff7000',\
8 '#ee0000',\
9 '#7f0000')
但是,采样区域的边框看起来是紫色的:
感谢。
1 1 1
1 2 0
1 3 0
1 4 0
1 5 0
1 6 0
1 7 0
1 8 0
2 1 0
2 2 0
2 3 1
2 4 2
2 5 3
2 6 0
2 7 0
2 8 0
3 1 0
3 2 0
3 3 2
3 4 10
3 5 15
3 6 2
3 7 0
3 8 0
4 1 0
4 2 0
4 3 0
4 4 5
4 5 2
4 6 1
4 7 0
4 8 0
5 1 0
5 2 0
5 3 0
5 4 3
5 5 2
5 6 0
5 7 0
5 8 0
6 1 0
6 2 0
6 3 0
6 4 2
6 5 0
6 6 0
6 7 1
6 8 0
7 1 0
7 2 0
7 3 0
7 4 0
7 5 0
7 6 0
7 7 0
7 8 0
8 1 0
8 2 0
8 3 0
8 4 0
8 5 0
8 6 0
8 7 0
8 8 0
答案 0 :(得分:6)
Plotting with pm3d
averages the data points. If you want to plot exactly the data points as matrix, you must plot with image
. To have certain values in white, define them as undefined with 1/0
:
set palette defined ( 0 '#000090',\
1 '#000fff',\
2 '#0090ff',\
3 '#0fffee',\
4 '#90ff70',\
5 '#ffee00',\
6 '#ff7000',\
7 '#ee0000',\
8 '#7f0000')
plot 'test.dat' u 1:2:($3 == 0 ? 1/0 : $3) with image notitle
答案 1 :(得分:2)
<强>更新强>
我刚刚使用image
看到了上面的答案(我会赞成这一点),这可能是达到你要求的最好方法。在任何情况下,我都使用数据文件进行了一些测试,并且只是为了完整性而分享:
set term png
set out "tmp.png"
set palette defined ( 0 '#ffffff',\
1 '#000090',\
2 '#000fff',\
3 '#0090ff',\
4 '#0fffee',\
5 '#90ff70',\
6 '#ffee00',\
7 '#ff7000',\
8 '#ee0000',\
9 '#7f0000')
set xrange[0:8]
set yrange[0:8]
set pm3d explicit at s
set view map
set multiplot layout 2,2
splot 'test.dat' u 1:2:3 not w pm3d
splot 'test.dat' u 1:2:3 not w p pt 5 ps 5 pal
splot 'test.dat' u 1:2:($3==0 ? 1/0:$3) not w pm3d
导致: