Создайте высокую плотность диаграммы с более чем 2 группами

Я попытался создать высокую плотность диаграммы с более чем двумя группами. Я нашел способ добавлять их по одному вручную, но должен быть лучший способ обработки групп.

Примеры: я хотел бы создать диаграмму высокого уровня, аналогичную приведенной ниже диаграмме ggplot, без добавления их по одному. Есть ли способ сделать это?

d

f <- data.frame(MEI = c(-2.031, -1.999, -1.945, -1.944, -1.875, 
                       -1.873, -1.846, -2.031, -1.999, -1.945, -1.944, -1.875, -1.873, 
                       -1.846, -2.031, -1.999, -1.945, -1.944, -1.875, -1.873, -1.846, 
                       -2.031, -1.999, -1.945, -1.944, -1.875, -1.873, -1.846), 
                 Count = c(10L,0L, 15L, 1L, 6L, 10L, 18L, 10L, 0L, 15L, 1L, 6L, 10L, 0L, 15L, 
                          10L, 0L, 15L, 1L, 6L, 10L, 10L, 0L, 15L, 1L, 6L, 10L, 18L), 
                 Region = c("MidWest", "MidWest", "MidWest", "MidWest", "MidWest", "MidWest", "MidWest", 
                                        "South", "South", "South", "South", "South", "South", "South", 
                                        "South", "South", "South", "NorthEast", "NorthEast", "NorthEast", 
                                        "NorthEast", "NorthEast", "NorthEast", "NorthEast", "NorthEast", 
                                        "NorthEast", "NorthEast", "NorthEast"))
df <- data.table(ddf)
df %>%ggplot() + 
  geom_density(aes(x=MEI, group=Region, fill=Region),alpha=0.5) + 
  xlab("MEI") +
  ylab("Density")

hcdensity(df[Region=="NorthEast"]$MEI,area = TRUE) %>%
  hc_add_series(density(df[Region=="MidWest"]$MEI), area = TRUE) %>%
  hc_add_series(density(df[Region=="South"]$MEI), area = TRUE)

person southwind    schedule 26.12.2018    source источник


Ответы (2)


Способ 1: tapply + reduce + hc_add_series

tapply(df$MEI, df$Region, density) %>%
  reduce(.f = hc_add_series, .init = highchart())

Метод 2: map + hc_add_series_list

(Ссылка: RPubs — Highcharter hc_add_series_list)

ds <- map(levels(df$Region), function(x){
  dt <- density(df$MEI[df$Region == x])[1:2]
  dt <- list_parse2(as.data.frame(dt))
  list(data = dt, name = x)
})

highchart() %>% 
  hc_add_series_list(ds)

введите здесь описание изображения

person Darren Tsai    schedule 26.12.2018
comment
Работает отлично. Спасибо. Любая идея, как я могу добавить цвета в область под кривой, например, ggplot? Я думал, что настройка area = TRUE должна позаботиться об этом - person southwind; 27.12.2018
comment
попробуйте тип = 'область' - person Ben; 08.07.2019

Я не мог найти способ сделать это непосредственно в highcharter. Но если вы рассчитаете плотности заранее и воспользуетесь функцией reduce() purrr, вы сможете автоматизировать создание графика:

library(purrr)

# calculate a list of densities (one per region)
densities <- df %>% group_by(Region) %>% 
  do(den = density(.$MEI)) %>%
  .$den

# create the highchart with all densities
reduce(densities, hc_add_series, .init = highchart())

reduce() объединяет список в один объект. К первой плотности в списке применяется highchart() и таким образом создается нужная highchart htmlwidget. Затем к нему добавляются все остальные плотности с hc_add_series().

person wici    schedule 26.12.2018