R绘制“绘图热图”

时间:2015-05-15 17:35:41

标签: r plot statistics confidence-interval

我有一个x行(即绘制数)和y列(观察数)的矩阵。它们代表y预测的分布。

现在我想制作抽奖的“热图”。也就是说,我想绘制一个'置信区间'(不是一个真正的置信区间,而只是所有带阴影的值),而是作为'热图'(heat map的一个例子)。这意味着,如果例如观察y = y *的大量抽取大约为1但是同一观察也有5的抽取,则那么1周围的置信区间的区域更暗(但整体是1到5之间仍有阴影。)

完全清楚:我喜欢回答here中的情节,但我希望灰色的置信区间被改为强度(即某些区域更暗)。

有人可以告诉我如何实现这一目标吗?

提前致谢。

编辑:根据请求:示例数据。 第一列的前20个值的示例(即y [1:20,1]):

[1]  0.032067416 -0.064797792  0.035022338  0.016347263  0.034373065 
0.024793101 -0.002514447  0.091411355 -0.064263536 -0.026808208 [11]  0.125831185 -0.039428744  0.017156454 -0.061574540 -0.074207109 -0.029171227  0.018906181  0.092816957  0.028899699 -0.004535961

2 个答案:

答案 0 :(得分:3)

所以,这很难将你的数据转换成正确的形状,这就是为什么分享一些真正看起来像你的数据的东西,而不仅仅是一个列。

假设您的数据是一个包含10,000行和10列的矩阵。我只会使用统一的分布,所以最后会是一个无聊的情节

apply

接下来,我们将使用dat = as.data.frame(t(apply(mat, MARGIN = 2, FUN = quantile, probs = seq(.1, 0.9, 0.1)))) 计算每列的分位数,转置并将其设为数据框:

x

添加dat$x = 1:nrow(dat) 变量(因为我们转置,每个x值对应原始数据中的一列)

quantile

我们现在需要将它变成一个“长”形式,按中位数周围某个偏差组的最小值和最大值分组,当然摆脱library(dplyr) library(tidyr) dat_long = gather(dat, "quantile", value = "y", -x) %>% mutate(quantile = as.numeric(gsub("%", "", quantile)), group = abs(50 - quantile)) dat_ribbon = dat_long %>% filter(quantile < 50) %>% mutate(ymin = y) %>% select(x, ymin, group) %>% left_join( dat_long %>% filter(quantile > 50) %>% mutate(ymax = y) %>% select(x, ymax, group) ) dat_median = filter(dat_long, quantile == 50) 引入的讨厌的百分号:

probs

最后我们可以策划。我们将为每个“组”绘制一条透明色带,即间隔为10%-90%,间隔为20%-80%,间隔为40%-60%,然后是中间的一条线(50%) )。使用透明度,中间会更暗,因为它上面有更多的丝带重叠。这不会从最小值变为最大值,但如果您将quantile调用中的library(ggplot2) ggplot(dat_ribbon, aes(x = x)) + geom_ribbon(aes(ymin = ymin, ymax = ymax, group = group), alpha = 0.2) + geom_line(aes(y = y), data = dat_median, color = "white") 设置为0到1而不是.1到.9。

layoutAttributesForELementsInRect

enter image description here

值得注意的是,不是传统的热图。热图通常意味着您有3个变量,x,y和z(颜色),其中每个x-y对都有一个z值。这里有两个变量,x和y,y取决于x。

答案 1 :(得分:1)

这不是很多,但我可能会从hexbinhexbinplot包开始。这篇SO帖子中提出了几种备选方案。

Formatting and manipulating a plot from the R package "hexbin"