Gnuplot直方图与Matlab风格

时间:2018-03-08 19:11:45

标签: matlab plot gnuplot

我想使用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

下面提供了制作情节的数据。结果图如下所示: enter image description here

正如您在下面的数据中看到的,大多数条目都为零,这使得绘图非常蓝。在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')

但是,采样区域的边框看起来是紫色的:

enter image description here

感谢。

   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

2 个答案:

答案 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

enter image description here

答案 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

导致:

output