我想绘制这样的热图
我知道如何在 R 中制作普通热图,但不确定如何引入 3D 组件。我想过只使用 3D 条形图,但后来我不确定如何有条件地设置条形颜色。有人可以推荐一个工具来做这样的事情吗? 另一个例子是 here
但它没有根据热图颜色进行着色。
这也可能被称为 3D 直方图。有没有办法在 R 中生成这样的图形(其中框的高度由 1 个变量给出,颜色格式由另一个变量指定?),例如 here
我对 JTT 解决方案的问题是,我需要能够独立于 VA Deaths 变量对 3D 条形进行着色。我有一个 2D 热图(它已经为每个 3D 条设置了颜色)。然后,条形的高度由另一个变量设置。这意味着颜色与高度无关。
最佳答案
3D 条形图可能是一个不错的选择。您可能想要测试的latticeExtra 包中有panel.3dbars()
。有关更多示例,请参阅该函数的帮助页面,但以下是根据帮助页面上的示例之一修改的示例:
library(latticeExtra)
# A function generating colors
cols<-function(n) {
colorRampPalette(c("#FFC0CB", "#CC0000"))(20) # 20 distinct colors
}
# The plot
cloud(VADeaths, panel.3d.cloud = panel.3dbars, col="white", # white borders for bars
xbase = 1, ybase = 1, zlim = c(0, max(VADeaths)), # No space around the bars
scales = list(arrows = FALSE, just = "right"), xlab = NULL, ylab = NULL,
col.facet = level.colors(VADeaths, at = do.breaks(range(VADeaths), 20),
col.regions = cols, # color ramp for filling the bars
colors = TRUE),
colorkey = list(col = cols, at = do.breaks(range(VADeaths), 20)),
screen = list(z = 65, x = -65)) # Adjust tilting
结果类似于:
请注意,需要将要绘制的数据转换为矩阵才能发挥作用。如果您从 X*Y 网格进行测量,其中 Z 是测量的强度,那么这应该相当容易实现。这里的函数(例如,level.colors()
)根据数据范围自动决定颜色,但您也可以在绘图之前自己生成颜色。
关于r - 绘制第三维热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25033419/