我正在嘗試創建一個熱圖,其中單元格的顏色與網格中的其他值不相關,而是鏈接到絕對值(有點像 excel 中的單元格格式,例如,綠色表示 0.20 和 0.25 之間的值)。我一直在玩 R 包superheat,但我仍然不清楚如何提供這樣的映射。關于如何做到這一點的任何建議?最好使用過熱,但有關如何通過其他軟體包進行操作的提示也很好。
更新:例如,使用 mtcars 資料集,我們得到
superheat(mtcars,
X.text = as.matrix(mtcars),
legend.breaks = c(min(mtcars), 0, max(mtcars)))
在資料框中添加一個新行,我們會為原始行中的完全相同的值獲得不同的顏色:
mtcars.new <- rbind(mtcars,
extrarow = c(-100, 6, 20, 10, 6, 2, 10, 1, 1, 6, 6))
superheat(mtcars.new,
X.text = as.matrix(mtcars.new),
legend.breaks = c(min(mtcars.new), 0, max(mtcars.new)))
我想要的是,顏色不依賴于資料框中存在的值,這樣當為不同的資料集創建地圖時,它們可以直接相互比較。
uj5u.com熱心網友回復:
這是一個示例,說明如何根據變數值創建“grpColor”變數。然后,您可以將 ggplot 中的顏色與此變數值匹配。(如果需要,不要猶豫改變因子水平)
### 1- Initiating data-frame
set.seed(1)
dfHeatmap <- data.frame(group1=rep(1:4, times=4), group2=rep(1:4, each=4), value=sample(1:100, 16))
### 2- Selecting colors depending on variable values
dfHeatmap$grpColor <- ifelse(dfHeatmap$value<30, "low",
ifelse(dfHeatmap$value<60, "medium", "high"))
### 3- Heatmap with fill=grpColor option in geom_tile
ggplot(data=dfHeatmap, aes(x=as.factor(group1), y=group2))
geom_tile(aes(fill=grpColor))
scale_fill_manual("legend", values = c("#25714f", "#1ea467", "#00e57d"))
xlab("group1")
ylab("group2")
geom_text(aes(label=value))
theme(legend.position="none",
line = element_blank())

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/471603.html
