highcharts 使用Highchart的R有效循环向下钻取图表

e0bqpujr  于 2022-11-10  发布在  Highcharts
关注(0)|答案(1)|浏览(214)

我给你带来了一个问题,我发现自己在做一项工作时。我需要执行一个'钻取',包含约100列,我遇到了一个效率问题。数据集包含从1913年到2021年。
第一个
我需要创建一个明细,其中显示了每年的平均值,在本例中,平均值只有2,但在原始数据框中,图表中应该显示大约100列
我能想到的办法是以下几种:
第一个
我将不得不为每个需要创建的 Dataframe 重复这段代码,我认识到这是低效的。
示例:

highchart() %>%
  hc_chart(type = "column") %>%
  hc_title(text = "Example Drilldown") %>%
  hc_xAxis(type = "category") %>%
  hc_legend(enabled = FALSE) %>%
  hc_plotOptions(series = list(boderWidth = 2,
                               dataLabels = list(enabled = TRUE))) %>%
  hc_add_series(data = dfDD,
                name = "Mean",
                colorByPoint = TRUE) %>%
  hc_drilldown(allowPointDrilldown = TRUE,
               series = list(list(id = "1913",
                                  data = list_parse2(df1913)),
                             list(id = '1914',
                                  data = list_parse2(df1914))))

更新日期:2022年5月7日
编辑:

我必须重新提出我的问题,因为我用了不正确的方式表达自己,这就是为什么我没有得到我的主要问题的答案。首先,我感谢每一个阅读和评论他对我的问题的意见的人。
重新表述的问题:
我需要创建一个“明细”样式的图表。我的原始数据集只有2列:

  • 日期
  • 价值

每年我有12个值 (1代表一年中的每个月)。问题是数据集在“年”列中注册了从1913年到2021年的年份。它大约有1300行。如果我没算错的话,它是109年,其中每个年份有12个值 只有2021年有7个。
在我之前解释的方法中,我解决问题的方法效率低下,而且时间很长。必须为一年中的每个子集创建一个数据框,这将是一件乏味的事情,我将创建100多个数据框。
有没有更有效的方法来解决我的问题?如果有,你能举个例子给我解释一下吗?非常感谢,很抱歉一开始表达得不好。
Data Source

km0tfn4u

km0tfn4u1#

从示例 Dataframedf开始,稍微处理一下数据,将变量 year 添加为字符:

df <- df %>% 
    mutate(YMD = ymd(year),
           year = as.character(year(YMD)))

...并在绘图合成期间进行分组和聚合(无需使用数据框架填满您的工作空间):

library(dplyr)

## (preceding plot instructions omitted)

## ...

hc_add_series(data = df %>%
                  group_by(year) %>%
                  summarise(y = mean(value, na.rm = TRUE)) %>%
                  mutate(name = year, drilldown = year) #, ... other args
              ) %>%
hc_drilldown(allowPointDrilldown = TRUE,
             series = list(
                 df %>%
                 group_by(year) %>%
                 summarise(drilldown_series = 
                               list(id = first(year),
                                    data =  list_parse2(
                                        df = .[c('year', 'value')] )
                                    )
                           ) %>%
                 pull(drilldown_series)
             )

如果你的 Dataframe 有很多列,你可能想把这些列堆叠起来,例如用pivot_longer,也就是说你把这些列缩小到两列:一个包含变量名称,第二个包含变量值:

library(tidyr)

df %>%
    pivot_longer(cols = first_column_to_stack : last_col_to_stack,
                 names_to = "variable",
                 values_to = "value"
                 )

...现在,您可以在将长格式 Dataframe 作为绘图参数输入之前,按变量(以及年份和...)动态filter长格式 Dataframe 。

相关问题