首先,我不得不说,我在stackoverflow和其他地方阅读了许多有关heatmap和ggplot2的线程。但是我的问题还没有解决。

我有以下数据集:

   Var1   Var2 value
1 -197.5 -197.5     0
2 -192.5 -197.5     0
3 -187.5 -197.5     0
4 -182.5 -197.5     0
5 -177.5 -197.5     0
6 -172.5 -197.5     0
.....


该值应该是颜色,并且右侧的图例会很好。

library(ggplot2)
ggheatmap <- ggplot(data = dat.plot, aes(x=Var1, y=Var2, fill=value)) +
  geom_raster()+
  scale_fill_gradientn(colours=rainbow(100))+
  theme(axis.text.x = element_text(angle = 0))+
  coord_fixed()
print(ggheatmap)


结果是:

r - 带有连续彩虹色的热图-LMLPHP

我想有一个“正常”的彩虹刻度,从红色=高到橙色,黄色,绿色,浅蓝色,深蓝色=低,而没有给出固定的离散颜色,例如使用scale_fill_gradient2。
我不知道为什么“彩虹”以红色开头=高端以其他红色结尾...

另一个问题:我该如何添加一些东西来“平滑”热图,以使到处都看不到“边缘”?

最佳答案

简短的答案:当您要求rainbow()不同的颜色时,当您通过100时,函数100会变得难以理解。

您应该做什么:将n传递给rainbow()以获取所需的颜色数。如果要从蓝色变为红色,则还必须使用功能rev()对其进行包装。

library(egg)
library(ggplot2)
library(reshape2)

# Heatmap number of rows/columns
Nvalue <- 1e2
# n for colors passed to function rainbow
nColor <- c(1:10, seq(20, 100, 20))
# dummy data
df <- melt(matrix(rnorm(N^2), N))

plotList <- list()
for(i in seq_along(nColor)) {
    plotList[[i]] <- ggplot(df, aes(Var1, Var2, fill = value)) +
        geom_raster() +
        scale_fill_gradientn(colours = rev(rainbow(nColor[i]))) +
        labs(title = paste0("rainbow(", nColor[i], ")"),
             x = NULL,
             y = NULL,
             fill = NULL) +
        theme_void()
}

ggarrange(plots = plotList)


r - 带有连续彩虹色的热图-LMLPHP

编辑:

在OP指定了他想要的颜色之后,则可以通过十六进制矢量:

hex <- c("#FF0000", "#FFA500", "#FFFF00", "#008000", "#9999ff", "#000066")
ggplot(df, aes(Var1, Var2, fill = value)) +
        geom_raster() +
        scale_fill_gradientn(colours = rev(hex)) +
        labs(x = NULL,
             y = NULL,
             fill = NULL) +
        theme_void()


r - 带有连续彩虹色的热图-LMLPHP

08-24 15:36