!!更新了来自Jan的信息.他已经清楚地展示了如何使用我下面的第一个数据集df3来实现这一点. 在我的最后一个例子中,我试图将他的方法应用到三个独立的数据集上,除非所有数据都在一个数据框中,否则钻取无法引用更高的级别.这是至关重要的,因为在某些链接中的关键方面方法显示每个钻取只有2列的框架,但它们必须来自一个整体更大的框架,其中所有链接都是隐式的.
在我的最后一个例子中加入了数据库,并使用Jan的方法,我包括了一个工作示例,以了解数据需要如何安排以及它是如何工作的.
我试图做一个多层次的钻取,不确定采取哪种方法或数据应该从哪种方式开始.以下的一些路径jkunst stackoverflow infoworld我try 了两种方法,第一种作品,但是加倍的一切在堆叠:应该有2在堆叠条形图:类型;固定,家庭.第一层是混乱的.
df3 <- tibble::tribble(
~Year, ~Full_Total, ~Total, ~Type, ~Sub_Type, ~Count,
1990, 40, 35, "Stationary", "Pencils", 20,
1990, 40, 35, "Stationary", "Rulers", 15,
1990, 40, 5, "Household", "Dishes", 5,
1990, 40, 5, "Household", "Cleaning_products", 0,
1991, 60, 30, "Stationary", "Pencils", 30,
1991, 60, 25, "Stationary", "Rulers", 25,
1991, 60, 0, "Household", "Dishes", 0,
1991, 60, 5, "Household", "Cleaning_products", 5,
1992, 90, 40, "Stationary", "Pencils", 30,
1992, 90, 40, "Stationary", "Rulers", 10,
1992, 90, 50, "Household", "Dishes", 40,
1992, 90, 50, "Household", "Cleaning_products", 10,
)
df3 <- df3 %>%
group_by(Year) %>%
mutate(Year = fct_inorder(as.character(Year)))
# ---- drilldown using df3
drilldown <- df3 %>%
group_nest(Year) %>%
mutate(id = Year,
type = "column",
data = map(data, mutate, name = `Type`, y = `Count`),
data = map(data, list_parse)
)
drilldown2 <- df3 %>%
group_nest(Year) %>%
mutate(id = Year,
type = "column",
data = map(data, mutate, name = "Sub_Type", y = "Count"),
data = map(data, list_parse)
)
# ---- data is ready for drilldown charting ----
# ---- chart ----
hchart(
df3,
"column",
hcaes(x = Year, y = `Total`, name = Type, drilldown = Year),
name = "Full Total",
colorByPoint = TRUE
) |>
hc_plotOptions(column = list(stacking = "normal")
)|>
hc_drilldown(
allowPointDrilldown = TRUE,
series = list_parse(drilldown)
)|>
hc_drilldown(
allowPointDrilldown = TRUE,
series = list_parse(drilldown2)
)
因此,上面的代码在第一级工作/工作不正确,但是添加一个列表列表到hc_drilldown,例如,进行更多的钻取不起作用.
hc_drilldown(
allowPointDrilldown = TRUE,
series = list(
list_parse(drilldown),
list_parse(drilldown2)
)
另一种方法如下,应该工作,并将有助于进一步的钻削,但我不能得到它的工作.
df1 <- tibble::tribble(
~Year, ~Total,~Type,
1990, 450, "Stationary",
1990, 450, "Food",
1990, 450, "Household",
1991, 600, "Stationary",
1991, 600, "Food",
1991, 600, "Household",
1992, 170, "Stationary",
1992, 170, "Food",
1992, 170, "Household",
1993, 253, "Stationary",
1993, 253, "Food",
1993, 253, "Household")
df1 <- df1 %>% group_by(Year) %>% mutate(Year = as.character(Year)) %>% mutate(Year = fct(Year))
df2 <- tibble::tribble(
~Year, ~Sub_Total,~Sub_Type,
1990, 100, "pencils",
1990, 200, "bread",
1990, 150, "bulbs",
1991, 200, "pens",
1991, 200, "milk",
1991, 200, "dishes",
1992, 50, "ruler",
1992, 100, "meat",
1992, 20, "cleaning",
1993, 150, "rubber",
1993, 100, "fruit",
1993, 3, "containers")
df2 <- df2 %>% select(!Year)
# ---- drilldown using df1 and df2
hc <- highchart() %>%
hc_title(text = "Basic Drilldown") %>%
hc_xAxis(type = "category") %>%
hc_legend(enabled = FALSE) %>%
hc_plotOptions(
series = list(
borderWidth = 0,
dataLabels = list(enabled = FALSE)
),
column = list(stacking = "normal")
) %>%
hc_add_series(
data = df1,
type = "column",
hcaes(name = "Year", y = Total/3),
name = "Type",
colorByPoint=TRUE
)
drilldown1 <- df2[c(1,4,7,10),]
drilldown2 <- df2[c(2,5,8,11),]
drilldown3 <- df2[c(3,6,9,12),]
drilldown1 <- list_parse2(drilldown1)
drilldown2 <- list_parse2(drilldown2)
drilldown3 <- list_parse2(drilldown3)
hc <- hc %>%
hc_drilldown(
allowPointDrilldown = TRUE,
series = list(
list(
id = "Stationary",
data = drilldown1),
list(
id = "Food",
data = drilldown2
),
list(
id = "Household",
data = drilldown3
)
)
)
最后,试图确保关键方面是正确的,并遵循这个例子make_3_level_drilldown_highcharter,但没有得到钻取工作.
main_df <- tibble::tribble(
~Year, ~Type, ~Total,
1990, "Primary", 100,
1991, "Primary", 200,
1992, "Primary", 300,
1993, "Primary", 400
)
sub_type_df <- tibble::tribble(
~Year, ~Sub_Type, ~Sub_Count,
1990, "A", 25,
1990, "B", 15,
1990, "C", 15,
1990, "D", 20,
1990, "E", 30,
1991, "A", 50,
1991, "B", 50,
1991, "C", 25,
1991, "D", 25,
1991, "E", 50,
1992, "A", 20,
1992, "B", 70,
1992, "C", 60,
1992, "D", 100,
1992, "E", 50,
1993, "A", 75,
1993, "B", 25,
1993, "C", 150,
1993, "D", 100,
1993, "E", 50,
)
parts_df <- tibble::tribble(
~Year, ~Sub_Type, ~Part, ~Part_Count,
1990, "A", "part-a", 5,
1990, "A", "part-b", 5,
1990, "A", "part-c", 10,
1990, "A", "part-d", 5,
1990, "B", "part-a", 0,
1990, "B", "part-b", 5,
1990, "B", "part-c", 5,
1990, "B", "part-d", 5,
1990, "C", "part-a", 5,
1990, "C", "part-b", 0,
1990, "C", "part-c", 5,
1990, "C", "part-d", 5,
1990, "D", "part-a", 10,
1990, "D", "part-b", 0,
1990, "D", "part-c", 5,
1990, "D", "part-d", 5,
1990, "E", "part-a", 15,
1990, "E", "part-b", 0,
1990, "E", "part-c", 10,
1990, "E", "part-d", 5,
1991, "A", "part-a", 20,
1991, "A", "part-b", 15,
1991, "A", "part-c", 10,
1991, "A", "part-d", 5,
1991, "B", "part-a", 15,
1991, "B", "part-b", 20,
1991, "B", "part-c", 5,
1991, "B", "part-d", 10,
1991, "C", "part-a", 5,
1991, "C", "part-b", 0,
1991, "C", "part-c", 15,
1991, "C", "part-d", 5,
1991, "D", "part-a", 10,
1991, "D", "part-b", 0,
1991, "D", "part-c", 10,
1991, "D", "part-d", 5,
1991, "E", "part-a", 15,
1991, "E", "part-b", 10,
1991, "E", "part-c", 10,
1991, "E", "part-d", 15,
1992, "A", "part-a", 5,
1992, "A", "part-b", 5,
1992, "A", "part-c", 10,
1992, "A", "part-d", 0,
1992, "B", "part-a", 20,
1992, "B", "part-b", 15,
1992, "B", "part-c", 5,
1992, "B", "part-d", 30,
1992, "C", "part-a", 20,
1992, "C", "part-b", 20,
1992, "C", "part-c", 15,
1992, "C", "part-d", 5,
1992, "D", "part-a", 10,
1992, "D", "part-b", 60,
1992, "D", "part-c", 15,
1992, "D", "part-d", 15,
1992, "E", "part-a", 15,
1992, "E", "part-b", 20,
1992, "E", "part-c", 10,
1992, "E", "part-d", 5,
1993, "A", "part-a", 25,
1993, "A", "part-b", 25,
1993, "A", "part-c", 10,
1993, "A", "part-d", 15,
1993, "B", "part-a", 10,
1993, "B", "part-b", 5,
1993, "B", "part-c", 5,
1993, "B", "part-d", 5,
1993, "C", "part-a", 80,
1993, "C", "part-b", 20,
1993, "C", "part-c", 15,
1993, "C", "part-d", 35,
1993, "D", "part-a", 10,
1993, "D", "part-b", 40,
1993, "D", "part-c", 25,
1993, "D", "part-d", 25,
1993, "E", "part-a", 15,
1993, "E", "part-b", 20,
1993, "E", "part-c", 10,
1993, "E", "part-d", 5,
)
full_df <- left_join(main_df, parts_df)
datSum <- full_df |>
summarize(Quantity = sum(Total), .by = Year)
Lvl1dfStatus <-
tibble(
name = datSum$Year,
y = datSum$Quantity,
drilldown = tolower(name)
)
drilldownLvl2 <- lapply(unique(full_df$Year), function(year_level) {
datSum2 <- full_df |>
filter(Year == year_level) |>
summarise(Quantity = sum(Part_Count), .by = Sub_Type)
Lvl2dfStatus <-
tibble(
name = datSum2$Sub_Type,
y = datSum2$Quantity,
drilldown = tolower(paste(year_level, name, sep = "_"))
)
list(
id = tolower(year_level),
name = "Type",
type = "column",
data = list_parse(Lvl2dfStatus)
)
})
drilldownLvl3 <- lapply(unique(full_df$Year), function(year_level) {
datSum2 <- full_df |>
filter(Year == year_level)
lapply(unique(datSum2$Sub_Type), function(type_level) {
datSum3 <- datSum2 %>%
filter(Sub_Type == type_level) %>%
summarise(Quantity = sum(Part_Count), .by = Part)
Lvl3dfStatus <-
tibble(name = datSum3$Part, y = datSum3$Quantity)
list(
id = tolower(paste(year_level, type_level, sep = "_")),
name = "Part",
type = "column",
data = list_parse2(Lvl3dfStatus)
)
})
}) |> unlist(recursive = FALSE)
highchart() |>
hc_title(text = "Basic multi-level drilldown") |>
hc_xAxis(type = "category") |>
hc_yAxis(title = list(text = "Count")) |>
hc_add_series(Lvl1dfStatus,
"column",
hcaes(
x = name,
y = y,
name = name,
drilldown = drilldown
),
name = "Year") |>
hc_plotOptions(column = list(stacking = "normal")) |>
hc_drilldown(allowPointDrilldown = TRUE,
series = c(drilldownLvl2, drilldownLvl3))