【问题标题】:Gnuplot histogram with Matlab style具有 Matlab 风格的 Gnuplot 直方图
【发布时间】:2018-03-08 19:11:44
【问题描述】:

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

【问题讨论】:

  • 您是否尝试将相应的调色板条目设置为白色?
  • 我尝试将零值设置为#ffffff(白色),但生成的图在边界处看起来很奇怪。它们看起来比相邻的点更暗。
  • 我不知道那是什么意思。请注意,您有一个 8x8 数组,但只创建了 7x7 正方形。数据位于交叉点。这可能是生成的图在边界处看起来很奇怪的原因。
  • 请看我刚刚添加到初始问题中的信息。
  • 在我看来,网格是用一种颜色绘制的,而边框是用另一种颜色绘制的。如果你仔细看,你可以在原始情节中观察到同样的情况。

标签: matlab plot gnuplot


【解决方案1】:

使用pm3d 绘制数据点的平均值。如果要将数据点精确绘制为矩阵,则必须plot with image。要将某些值设为白色,请使用 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

【讨论】:

    【解决方案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
    

    导致:

    【讨论】:

    • 谢谢。嗨,这是我得到的情节,但我想改进。我想以某种方式将所有零条目设为白色,并将所有其他点设为使用我上面提到的调色板(没有 0 '#ffffff')。我试图避免 0 到 2 之间的模糊区域(如图中的比例框所示)。
    猜你喜欢
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    相关资源
    最近更新 更多