I have the following code to show the color key above the heatmap. But the color key is not exact on top (a little shifted to the right) of the heatmap. Does anyone know how to make the color not shifted? Also, how to remove the white space on the right of the heatmap? Thanks.
library(gplots)
heatmap.2(
matrix(rnorm(100*10), nrow=100)
, dendrogram='none'
, Colv = F
, Rowv = F
, trace='none'
, col = colorRampPalette(c('blue', 'yellow'))(12)
, labRow=NA
, labCol=NA
, density.info='none'
, lmat=rbind(c(4, 2), c(1, 3)), lhei=c(2, 8), lwid=c(4, 1)
)
One can center the color key by adding "padding sections" ("5" and "6", in my particular case) to the lattice at the left (see the "#" comment over the last line of the code:
heatmap.2(x=matrix(rnorm(20*10), nrow=10), Rowv=NULL,Colv=NULL,
col = rev(rainbow(20*10, start = 0/6, end = 4/6)),
scale="none",
margins=c(3,0), # ("margin.Y", "margin.X")
trace='none',
symkey=FALSE,
symbreaks=FALSE,
dendrogram='none',
density.info='histogram',
denscol="black",
keysize=1,
#( "bottom.margin", "left.margin", "top.margin", "left.margin" )
key.par=list(mar=c(3.5,0,3,0)),
# lmat -- added 2 lattice sections (5 and 6) for padding
lmat=rbind(c(5, 4, 2), c(6, 1, 3)), lhei=c(2.5, 5), lwid=c(1, 10, 1))
Not quite what you're asking for, but here's a way to create more or less the same plot using ggplot
.
library(ggplot2)
library(reshape2) # for melt(...)
library(grid) # for unit(...)
set.seed(1) # for reproducible example
df <- data.frame(matrix(rnorm(100*10), nr=10))
df.melt <- melt(cbind(x=1:nrow(df),df),id="x")
ggplot(df.melt,aes(x=factor(x),y=variable,fill=value)) +
geom_tile() +
labs(x="",y="")+
scale_x_discrete(expand=c(0,0))+
scale_fill_gradientn(name="", limits=c(-3,3),
colours=colorRampPalette(c('blue', 'yellow'))(12))+
theme(legend.position="top",
legend.key.width=unit(.1,"npc"),legend.key.height=unit(.05,"npc"),
axis.text=element_blank(),axis.ticks=element_blank())

I was able to solve my own problem with the colour key relative position, but fiddling around with the margin values associated with key.par
key.par=list(mar=c(bottom, left, top, right))
Just substitute in the values for 'bottom', 'left', 'top' and 'right' margins of the colour key that you want to adjust (the default margin for each is 4, which gives space for any labels).
key.par=list(mar=c(4,4,4,4)
uses the default margins.
key.par=list(mar=c(4,4,4,10))
would move it over from the right. You would have to see what value other than 10 works best for your plot.
来源:https://stackoverflow.com/questions/24621070/heatmap-2-with-color-key-on-top