更改geom_raster中的颜色渐变以更好地显示离群值

时间:2019-06-13 16:54:26

标签: r ggplot2 geom-raster

我有一个数据集,其中包含一些作为ggplot中的栅格绘制的离群值。未经修改的配色方案倾向于以显示大多数数据的分布为代价来突出显示这些异常值。设置限制会有所帮助,但超过指定限制的值会丢失。有没有办法在色带的末端绘制超出限制的值?

这是来自忠实数据集的示例。这不是我的数据的完美比喻,因为没有异常值引起问题,但这显示了我的问题。

ggplot(faithfuld, aes(waiting, eruptions)) +
  geom_raster(aes(fill = density))+
  scale_fill_gradientn(colours = 
  c("red", "orange", "yellow", "green","blue","purple","white"))

比方说,我希望较少关注较高的值。也许有比设置限制更好的方法了?在有限制的情况下,我使数据超出最大值(此处为0.03)。

ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(aes(fill = density))+
scale_fill_gradientn(limits = c(0,.03),
                   colours = c("red","orange", "yellow", "green","blue",
                               "purple","white"))

理想情况下,我想像在GIS中那样进行绘制,其中超出我限制的值将设置为色带的最大值。我总是可以修改数据以使其显示出来,但我希望ggplot中有更优雅的解决方案。

1 个答案:

答案 0 :(得分:0)

您可以使用na.value定义离群值的颜色,并将离群值的颜色与最大值匹配。

ggplot(faithfuld, aes(waiting, eruptions)) +
  geom_raster(aes(fill = density))+
  scale_fill_gradientn(limits = c(0,.03),
                       na.value = "white", #na.value color same as color for max value
                       colours = c("red","orange", "yellow", "green","blue",
                                   "purple","white"))

其缺点之一是刻度仍显示0.03的白色,尽管它应该读为> 0.03才能准确。您可能需要编辑比例以使标签准确。