使用ggplot()无法正确显示HeatMap

时间:2014-05-05 22:00:05

标签: r plot ggplot2 heatmap

当我尝试在我可以找到的here数据集上绘制热图时,我遇到了一个奇怪的情况。

我使用以下代码绘制热图:

xaxis<-c('density')
midrange<-range(red[,xaxis])
xaxis <- c(xaxis,'quality')
molten<-melt(red[,xaxis],'quality')

p <- ggplot(molten, aes(x = value, y = quality))
p <- p + geom_tile(aes(fill = value), colour = "white")
p <- p + theme_minimal()

# turn y-axis text 90 degrees (optional, saves space)
p <- p + theme(axis.text.y = element_text(angle = 90, hjust = 0.5))

# remove axis titles, tick marks, and grid
p <- p + theme(axis.title = element_blank())
p <- p + theme(axis.ticks = element_blank())
p <- p + theme(panel.grid = element_blank())

p <- p + scale_y_discrete(expand = c(0, 0)) 
# optionally remove row labels (not useful depending on molten)
p <- p + theme(axis.text.x = element_blank()) 

# get diverging color scale from colorbrewer
# #008837 is green, #7b3294 is purple
palette <- c("#008837", "#b7f7f4", "#b7f7f4", "#7b3294")


if(midrange[1] == midrange[2]) {
  # use a 3 color gradient instead
  p <- p + scale_fill_gradient2(low = palette[1], mid = palette[2], high = palette[4], midpoint = midrange[1]) +
    xlim(midrange[1],midrange[2])
}else{
  # use a 4 color gradient (with a swath of white in the middle)
  p <- p + scale_fill_gradientn(colours = palette, values = c(0, midrange[1], midrange[2], 1)) +
    xlim(midrange[1],midrange[2])
}
p

我正在尝试在变量Density上绘制热图,并希望在我的热图中使用变量quality作为分离。当我使用上面的代码时,我得到以下图:

enter image description here

可以清楚地看到它是一张空白图像。发生这种情况是因为变量Density的范围非常低,如果我将变量更改为具有更宽范围的变量(例如pH),则不会发生这种情况。 ggplot应该自动调整到这个吗?如果没有,我怎样才能让ggplot显示真实情节?

在这方面的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

所以这里至少有两个问题。

首先,你在x方向上有大约1600个图块,因此为大纲指定color="white"意味着你看到的只是轮廓,因此是白色。试着解决这个问题。

其次,在您values=c(...)的{​​{1}}论证中,您似乎期望scale_fill_gradientn(...)midrange[1]介于(0,1)之间,但midrange[2]

midrange[2] = 1.003的电话中取出color="white"后,我明白了: