【问题标题】:3D view of 2D histogram (heat map) in gnuplotgnuplot 中 2D 直方图(热图)的 3D 视图
【发布时间】:2017-09-04 07:22:39
【问题描述】:

我如何(或我可以)呈现this gnuplot histogram:


在这种风格的 3D 直方图视图中 - 在 gnuplot 中?:


最好使用与答案中的 gnuplot 示例相同的数据和数据格式。

【问题讨论】:

  • 完全在 gnuplot 中做这件事很麻烦,见phyast.pitt.edu/%7Ezov1/gnuplot/html/bargraphs.html的最后一个例子
  • 你看过these吗?
  • @Christoph 链接中的“Cuboids”方法非常接近。不幸的是,您说的非常复杂,示例仍然缺少轴。我可以在 gnuplot 中找到最接近本机支持的东西是 impulses 或可能是 vector 样式。问题是,gnuplot 仍然在 3d 模式下将条/线渲染为 2d 线,而不是表面,我认为不可能将表面纹理应用于线条。

标签: gnuplot histogram heatmap


【解决方案1】:

gnuplot 中最接近的不涉及重大黑客和/或预处理的东西似乎是impulses 风格。帮助文档甚至建议将它们用于 3d 条形图:

为了在 3D 绘图中有效地使用这种风格,它是 用于选择粗线(线宽 > 1)。这近似于 3D 条形图。

这是一个使用impulses 的简单示例,以及链接热图示例中的矩阵样式数据:

set title ''
unset key
set xyplane 0
set view 60,300,1.2
set xrange [-0.5:5]
set yrange [-0.5:5]
splot '-' matrix with impulses lw 20
0 0 0 0 0 0 
0 1 2 3 4 5 
0 2 4 6 8 10 
0 3 6 9 12 15 
0 4 8 12 16 20 
0 5 10 15 20 25
e

问题是gnuplot 将脉冲呈现为 2d 笔触。如果有办法将 3d 表面效果应用于这些线条,那将是理想的,但我认为没有办法,因为它们只是线条,而不是表面。

您也可以使用vectors 样式来实现与上述impulses 类似的结果,但支持“rgb 变量”(AFAIK 脉冲不支持此)。这允许您根据 z 值更改颜色 - 但仍然没有 3d 表面。您必须对向量样式 (AFAIK) 使用不同的数据格式,但它比其他一些 hack 所需的矩阵样式数据更简单:

set xyplane 0
set view 60,301,1.2
set xrange [0.5:5]
set yrange [0.5:5]
rgb(r,g,b) = 65536 * int(r) + 256 * int(g) + int(b)
splot '-' using 1:2:(0):(0):(0):3:(rgb($3*(255/25),0,0)) with vectors nohead lw 40
5 5 25
5 4 20
5 3 15
5 2 10
5 1 5
4 5 20
4 4 16
4 3 12
4 2 8
4 1 4
3 5 15
3 4 12
3 3 9
3 2 6
3 1 3
2 5 10
2 4 8
2 3 6
2 2 4
2 1 2
1 5 5
1 4 4
1 3 3
1 2 2
1 1 1
e

【讨论】:

    【解决方案2】:

    OP 的问题我该如何...

    有一些变通方法可以产生类似于您展示的示例的输出。 它们没有您可能想要格式化的所有花里胡哨,但它们是看起来“不错”的近似值。

    1. 根据 http://lowrank.net/gnuplot/plotpm3d-e.html#6.9pm3d 应该可以满足您的需求。 另请参阅pm3din this link

    2. 如果阴影是必不可少的,您可以尝试使用this 中的一些。但是你应该锻炼很多。

    3. here 给出了您所要求的另一个穷人近似值。

    我这里没有 gnuplot 来测试这些。

    ...(或者我可以)

    据广泛记载,没有用于 3D 直方图的工具,并且可以使用相应的选项(阴影、间距、后墙、透视图、视角选择等)来绘制真实的此类图。需要复杂的用户编程。

    【讨论】:

    • 谢谢。使用链接中显示的 pm3d 是一个很酷的想法,但没有解决一些问题:1. 条之间的间距,2. 一致的左、右、顶条阴影。还需要对数据进行预处理,应该是太难了并不理想。
    • @spinkus - 好的。请参阅更新的答案。使用pm3d 的预处理似乎并不难。我猜可能会在几个小时内完成。
    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多