Использование stat_binhex() с ggpairs()

Я хотел бы использовать stat_binhex() статистика из ggplot2 с ggpairs() функция (GGally R пакет). Например, я хотел бы использовать stat_binhex() на этом участке вместо geom_point(), Это возможно?

Спасибо за вашу помощь!

3 ответа

Решение
set.seed(1)
library(GGally)
library(hexbin)
df <- as.data.frame(matrix(rnorm(20*3), ncol=3))
p <- ggpairs(df, lower="blank")
seq <- 1:ncol(df)
for (x in seq)
  for (y in seq) 
    if (y>x) 
      p <- putPlot(p, ggplot(df, aes_string(x=names(df)[x],y=names(df)[y])) + stat_binhex(bins=4), y,x)
p

Скриншот

С текущей версиейGGally(2.1.2) это намного проще, чем раньше: не требует низкоуровневого взлома и его легче сочетать с другими аспектамиggpairsнастройка.

      ggally_hexbin <- function (data, mapping, ...)  {
    p <- ggplot(data = data, mapping = mapping) + geom_hex(...)
    p
}
ggpairs(df, 
    ## use 'ggally_hexbin' for continuous × continuous plots
    lower = list(continuous = "hexbin", 
    ## use default plots for all other variable types
    combo = "facethist", discrete = "facetbar", na =  "na"))

Не могу поверить, что это все еще не часть GGallyс ggpair()настройка.

Основываясь на ответе lukeA , давайте преобразуем его в функцию:

Требования к настройке и определение функции:

      require(ggplot2)[enter image description here][1]
require(GGally)
require(hexbin)


ggpairs_hex <- function(df, hexbins = 10) {
  # REF: https://stackoverflow.com/questions/20872133/using-stat-binhex-with-ggpairs
  p <- ggpairs(df, lower="blank")
  seq <- 1:ncol(df)
  for (x in seq)
    for (y in seq) 
      if (y>x) 
        p <- putPlot(p, ggplot(df, aes_string(x=names(df)[x],y=names(df)[y])) + stat_binhex(bins = hexbins), y,x)
  
  return(p)
}

Сгенерируйте некоторые данные:

      require(MASS)

# data generation from:
# https://predictivehacks.com/how-to-generate-correlated-data-in-r/
set.seed(312)
# create the variance covariance matrix
sigma<-rbind(c(1,-0.8,-0.7), c(-0.8,1, 0.9), c(-0.7,0.9,1))
# create the mean vector
mu<-c(10, 5, 2) 
# generate the multivariate normal distribution
df<-as.data.frame(MASS::mvrnorm(n=10000, mu=mu, Sigma=sigma))

Проверьте функцию:

      ggpairs_hex(df, hexbins = 5)
ggpairs_hex(df, hexbins = 10)
ggpairs_hex(df, hexbins = 20)

Другие вопросы по тегам