簡體   English   中英

R繪制“繪圖熱圖”

[英]R plot 'Heat map' of set of draws

我有一個矩陣,有x行(即繪制數)和y列(觀察數)。 它們代表y預測的分布。

現在我想制作抽獎的“熱圖”。 也就是說,我想繪制“置信區間”(不是一個真正的置信區間,但都只是在明暗之間的值),但作為一個“熱圖”(一個示例熱圖 )。 這意味着,如果例如觀察y = y *的大量抽取大約為1但是同一觀察也有5的抽取,則那么1周圍的置信區間的區域更暗(但整體是1到5之間仍然是陰影)。

要完全清楚:我喜歡這里的答案中的情節,但是我希望灰色置信區間被改為強度(即某些區域更暗)。

有人可以告訴我如何實現這一目標嗎?

提前致謝。

編輯:根據請求:示例數據。 第一列的前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

因此,這很難將您的數據轉換為正確的形狀,這就是為什么分享真正看起來像您的數據的東西,而不僅僅是單個列的原因。

假設您的數據是一個包含10,000行和10列的矩陣。 我只會使用統一分布,所以最后會是一個無聊的情節

n = 10000
k = 10
mat = matrix(runif(n * k), nrow = n)

接下來,我們將使用apply ,transpose計算每列的分位數,並使其成為數據框:

dat = as.data.frame(t(apply(mat, MARGIN = 2, FUN = quantile, probs = seq(.1, 0.9, 0.1))))

添加一個x變量(因為我們轉置,每個x值對應於原始數據中的一列)

dat$x = 1:nrow(dat)

我們現在需要將它變成一個“長”形式,按照中位數周圍某個偏差組的最小值和最大值分組,當然要擺脫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)

最后我們可以策划。 我們將為每個“組”繪制一條透明色帶,即間隔為10%-90%,間隔為20%-80%,間隔為40%-60%,然后是中間的一條線(50%) )。 使用透明度,中間會更暗,因為它上面有更多的絲帶重疊。 這不是從最小值到最大值,但是如果你將quantile調用中的probs設置為0到1而不是.1到.9。

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")

在此輸入圖像描述

值得注意的是,這不是傳統的熱圖。 熱圖通常意味着您有3個變量,x,y和z(顏色),其中每個xy對都有一個z值。 這里有兩個變量,x和y,y取決於x。

這不是很多,但我可能會從hexbinhexbinplot包開始。 本SO帖子中提供了幾種替代方案。

格式化和操作R包“hexbin”中的繪圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM