如何用第二个指示器geom_tile层覆盖geom_tile热图?

时间:2019-08-07 11:00:45

标签: r ggplot2

我正在尝试通过以下方式突出显示热点图中的单个图块

ggplot(faithfuld, aes(waiting, eruptions)) +
    geom_raster(aes(fill = density)) +
    geom_tile(data = faithfuld[50, ],  fill = "red")

但是,结果不是突出显示(此处是随机选择的)图块,而是添加了更多的arbitray图块。

enter image description here

为什么会这样,我如何添加正确的图块尺寸的第二个geom_tile层?

1 个答案:

答案 0 :(得分:1)

图像中的geom_tile突出显示了您想要的确切图块(它采用给定的数据点并将它们设置为图块的中心),但是很难看到这一点,因为它创建的图块非常长。如果您使用widthheight设置进​​行游戏,则可以获得更合理的信息。

ggplot(faithfuld, aes(waiting, eruptions)) +
  geom_raster(aes(fill = density)) +
  geom_tile(data = faithfuld[50, ],  width = 1, height = 0.1, fill = "red")

example

编辑:

如何获取geom_raster的确切高度和宽度并将其与geom_tile一起使用(两者的默认值均为1):

p <- ggplot(faithfuld, aes(waiting, eruptions)) +
  geom_raster(aes(fill = density))

tmp <- ggplot_build(p)$data[[1]][2,]  # get the first data point from geom_raster
width <- tmp$xmax - tmp$xmin  # calculate the width of the rectangle
height <- tmp$ymax - tmp$ymin  # calculate the height of the rectangle
p <- p +
  geom_tile(data = faithfuld[50, ],  width = width, height = height, fill = "red")

example 2

还有其他解决方案,例如one,您可以对变量进行分类。