【问题标题】:Create highchart density with more than 2 groups创建超过 2 个组的高密度图表
【发布时间】:2019-05-24 14:16:02
【问题描述】:

我尝试使用两个以上的组创建高密度图表。我找到了一种手动逐个添加它们的方法,但必须有更好的方法来处理组。

示例:我想创建一个类似于下面的ggplot图表的highchart,而不是一一添加。有什么办法吗?

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)

【问题讨论】:

    标签: r highcharts r-highcharter


    【解决方案1】:

    方法一: tapply + reduce + hc_add_series

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

    方法二: 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)
    

    【讨论】:

    • 效果很好。谢谢。知道如何向 ggplot 等曲线下的区域添加颜色吗?我认为设置 area = TRUE 应该可以解决这个问题
    • 试试 type='area'
    【解决方案2】:

    我想不出直接在highcharter 中这样做的方法。但是,如果您事先计算密度并使用purrrreduce() 函数,您可以自动创建绘图:

    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() 将所有其他密度添加到其中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      相关资源
      最近更新 更多