【问题标题】:How to make 3D histogram in R如何在 R 中制作 3D 直方图
【发布时间】:2015-08-14 07:30:42
【问题描述】:

这是我的目标:根据xz 轴上绘制y 的频率。

这些是我的问题:我有一个两列数组(xy),需要将 x 划分为类(例如 0.2 或 0.5)并计算 y 的频率x 的每一类。该图应在“地面”计划中显示为x-y 图,在z 轴中显示频率。它可能像一个表面或 3D 直方图。我尝试使用plot3D 包的hist3D 函数来实现它,但我不知道我做错了什么。

这是我正在尝试做的一个例子:

https://www.safaribooksonline.com/library/view/r-data-visualization/9781783989508/ch06s05.html

谢谢!!

【问题讨论】:

  • 该示例中的颜色反映在高度中并且是多余的。您可以制作 2d + 彩色热图并提供相同的信息,而不会掩盖高条后面的大量数据。
  • @thelatemail,感谢您的提示。我会试试热图。

标签: r plot 3d histogram


【解决方案1】:

使用一些模拟数据,这应该可以满足您的需求。关键是您必须使用cut() 函数创建您的二元箱。然后将分箱因子视为水平,然后我们可以使用如下table() 函数计算每个因子水平的组合:

library(plot3D)

##  Simulate data:
set.seed(2002)
x <- rnorm(1000)
y <- rnorm(1000)

##  Create cuts:
x_c <- cut(x, 20)
y_c <- cut(y, 20)

##  Calculate joint counts at cut levels:
z <- table(x_c, y_c)

##  Plot as a 3D histogram:
hist3D(z=z, border="black")

##  Plot as a 2D heatmap:
image2D(z=z, border="black")

【讨论】:

  • 谢谢,伙计。我在可能的数据中使用了你的代码,它工作得很好,但正如@thelatemail 所说,也许热图是最好的选择。
  • 在这种情况下,我当然同意。 :) 我编辑了我的答案以将其记录为一个选项:
  • @Forrens R. Stevens,这种方式看起来好多了!分析新图我正在考虑一些不同的东西,也许你也可以帮助我:我想为每个x 类一起绘制的“独立直方图”制作另一个图。只是为了说清楚:你的例子中每一列的体态应该是 1。在这种情况下,尺度上不会有超高的值,而是从 0 到 1 变化的更平滑的热图。
  • 我不确定我是否理解您的要求。 “躯体化”是什么意思?我假设您希望以某种方式缩放值,但是通过所有表或按列的最大联合计数?你所说的“平滑”热图是什么意思?如果您愿意,您可以改变 bin 宽度以创建更精细分级的直方图?或者您也可以获取生成的 2D 热图并对其进行插值?
  • 你可以。一种简单的方法是将矩阵对象转换为栅格并将其插入到更精细的网格中。请参阅my answer here 以获得良好的起点。
猜你喜欢
  • 2021-02-05
  • 2021-04-22
  • 2011-01-25
  • 2015-07-12
  • 2019-01-28
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多