在R中创建2D网格或栅格,将所有变量与所有变量进行比较

时间:2018-06-01 19:40:40

标签: r heatmap raster r-grid

我的数据可重现的例子:

df_1 <- data.frame(cbind("Thriving" = c(2.33, 4.21, 6.37, 5.28, 4.87, 3.92, 4.16, 5.53), "Satisfaction" = c(3.45, 4.53, 6.01, 3.87, 2.92, 4.50, 5.89, 4.72), "Wellbeing" = c(2.82, 3.45, 5.23, 3.93, 6.18, 4.22, 3.68, 4.74), "id" = c(1:8)))

正如您所看到的,它包括三个心理测量变量和一个ID为每个受访者的标识符。

现在,我的目标是创建一个2D网格,通过该网格,我可以很好地概述所有关于每个变量的受访者的所有值。所以在x轴上我会得到所有受访者的id和y轴上的所有变量,而特定字段的颜色取决于值 - 红色为1到3,黄色为3到5,5为7绿色The style of the grid should be like this image.

到目前为止我所做的只是以下代码将所有变量/项压缩到一列中,以便它们可以在y轴上一起描绘 - id当然包含在它自己的列中,值也是如此:

df_1 %>%
  select("Thr" = Thriving, "Stf" = Satisfaction, "Wb" = Wellbeing, "id" = id) %>%
  na.omit %>%
  gather(key = "variable", value = "value", -id) %>%

我正在寻找一种无需将数据存储在新框架中的解决方案。

此外,我正在寻找一种对100个或更多受访者和最多40个变量有用的解决方案。如果一个矩形非常小就没关系,我只想拥有一个漂亮的颜色,这样可以很好地了解组织可能达到的低或高 - 以及它如何实现。

感谢阅读,非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

可能有更好的面向图形的方法,但您可以使用基本绘图并将数据视为栅格来执行此操作:

library(raster)
df_1 <- cbind("Thriving" = c(2.33, 4.21, 6.37, 5.28, 4.87, 3.92, 4.16, 5.53), "Satisfaction" = c(3.45, 4.53, 6.01, 3.87, 2.92, 4.50, 5.89, 4.72), "Wellbeing" = c(2.82, 3.45, 5.23, 3.93, 6.18, 4.22, 3.68, 4.74), "id" = c(1:8))
r <- raster(ncol=nrow(df_1), nrow=3, xmn=0, xmx=8, ymn=0, ymx=3)
values(r) <- as.vector(as.matrix(df_1[,1:3]))
plot(r, axes=F, box=F, asp=NA)
axis(1, at=seq(-0.5, 8.5, 1), 0:9)
axis(2, at=seq(-0.5, 3.5, 1), c("", colnames(df_1)), las=1)

enter image description here

相关问题