首先,我必须说我在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)
结果是:
我想要一个正常的&#34;红色的彩虹标度=高于橙色的黄色,黄色,绿色,浅蓝色,深蓝色=低而不提供固定的离散色,就像人们可以做到的那样,例如使用scale_fill_gradient2。 我想知道为什么&#34; rainbow&#34;以红色开头=高端以及其他一些红色......
另一个问题:我怎样才能添加一些内容?#34; smooth&#34;热图,以便人们看不到&#34;边缘&#34;到处?
答案 0 :(得分:1)
简短回答:当您要求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)
编辑:
在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()
答案 1 :(得分:0)
ggheatmap <- ggplot(data = dat.plot, aes(x=Var1, y=Var2, fill=value)) +
geom_raster(interpolate=TRUE)+
scale_fill_gradientn(colors=rev(c("darkred", "red", "orange", "yellow", "green", "lightgreen", "lightblue", "darkblue")))+
theme(axis.text.x = element_text(angle = 0))+
coord_fixed()
print(ggheatmap)
现在看起来很模糊。但是没问题。如果你认为它不能做得更好,我就让它原样。非常感谢你!
答案 2 :(得分:0)
使用复杂的色阶插值颜色的问题最好在&#34;老忠实&#34;数据
如果您使用用户定义的&#34; rainbow&#34;色阶,插值不会那么好(即使结果看起来还不错)。
无插值
library(ggplot2)
cols <- rev(rainbow(7)[-7])
ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(aes(fill = density), interpolate = FALSE) +
scale_fill_gradientn(colours = cols)
使用插值
ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(aes(fill = density), interpolate = TRUE) +
scale_fill_gradientn(colours = cols)
使用插值和不太复杂的调色板
ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(aes(fill = density), interpolate = TRUE) +
scale_fill_gradientn(colours = c("steelblue", "tomato"))