gpt4 book ai didi

R plot 'Heat map' 一组绘图

转载 作者:行者123 更新时间:2023-12-01 12:35:30 26 4
gpt4 key购买 nike

我有一个包含 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

最佳答案

因此,这其中最困难的部分是将您的数据转换为正确的形状,这就是为什么分享真正看起来像您的数据的东西而不仅仅是单个列是很好的原因。

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

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

接下来,我们将使用 apply 计算每一列的分位数,转置并使其成为数据框:

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

enter image description here

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

关于R plot 'Heat map' 一组绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30265557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com