如何在成对相关散点图中包括密度着色

时间:2017-07-07 02:01:32

标签: r ggplot2 tidyverse ggally

我有以下代码:

library(GGally)
library(nycflights13)
library(tidyverse)

dat <- nycflights13::flights %>% 
       select(dep_time, sched_dep_time, dep_delay,  arr_time, sched_arr_time, arr_delay)  %>% 
       sample_frac(0.01)
dat
ggpairs(dat)

它产生了这个:

enter image description here

如何添加密度着色,使其如下所示:

enter image description here

1 个答案:

答案 0 :(得分:6)

使用How to reproduce smoothScatter's outlier plotting in ggplot?R - Smoothing color and adding a legend to a scatterplotHow to use loess method in GGally::ggpairs using wrap function中的提示,您可以定义自己的函数以传递给ggpairs。

my_fn <- function(data, mapping, ...){
      p <- ggplot(data = data, mapping = mapping) + 
        stat_density2d(aes(fill=..density..), geom="tile", contour = FALSE) +
        scale_fill_gradientn(colours=rainbow(100))
      p
}

ggpairs(dat, lower=list(continuous=my_fn))

修改

来自评论:如何在对角线上添加直方图并删除&#34; Corr:&#34;在相关值?

您可以设置diag onal和upper参数。因此,要添加直方图(假设您的意思是geom_histogram),您可以使用diag=list(continuous=wrap("barDiag", binwidth=100))并完全删除关联使用upper=list(continuous="blank")。如果您想要实际删除文字*corr:*,则需要定义新功能 - 请参阅Change colors in ggpairs now that params is deprecated处的cor_fun功能。

所以你的情节变得

ggpairs(dat, lower=list(continuous=my_fn),
        diag=list(continuous=wrap("barDiag", binwidth=100)),
        upper=list(continuous=wrap(cor_fun, sz=10, stars=FALSE))
        )

enter image description here

修改

来自评论:如何为OP中的对角线直方图着色?

要着色,只需将相关参数添加到barDiag函数,在本例中为fillcolour。那么diag就是

diag=list(continuous=wrap("barDiag", binwidth=100, fill="brown", col="black")) 

fill给出主色,col给出颜色以勾勒出条形图)