更改 geom_raster 中的色带以更好地显示异常值

Changing color ramp in geom_raster to better display outliers

我有一个数据集,其中有一些异常值,我在 ggplot 中将其绘制为栅格。未经修改的配色方案往往会以显示大部分数据的分布为代价来突出显示这些异常值。设置限制有帮助,但超过指定限制的值将丢失。有没有办法在颜色渐变的末尾绘制超出限制的值?

这是来自 faithful 数据集的示例。这不是我的数据的完美类比,因为没有异常值导致问题,但它显示了我的问题。

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 中有一个更优雅的解决方案。

您可以使用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 才准确。您可能想要编辑您的比例以使标签准确。