R HighCharter 堆叠柱顺序和颜色

问题描述 投票:0回答:1

我正在尝试更改 R 中 highcharter 图中堆积条的顺序和颜色。

当我在 ggplot 中遇到这个问题时,我已经习惯于定义因子级别,并且在 highcharter 中搜索解决方案时找到了一些答案,建议在 hc_xAxis() 中类似地定义类别,但这还没有为我工作。尝试这样做会对我的 x 轴造成严重破坏(不再将其显示为日期)并且它仍然不会改变顺序。我也不喜欢指定单个堆叠条的颜色,我习惯在 ggplot 中使用 scale_fill_manual() 来执行此操作,但这里看起来颜色是按字母顺序映射的。

我的目标是按如下顺序(从下到上)获得堆叠条形图:TL > WB > PB > UB > NACx > ACx。

这是我的数据框:

df <- structure(list(Week = structure(c(19478, 19478, 19478, 19478, 
19478, 19478, 19478, 19485, 19485, 19485, 19485, 19485, 19485, 
19485, 19492, 19492, 19492, 19492, 19492, 19492, 19492, 19499, 
19499, 19499, 19499, 19499, 19499, 19499, 19506, 19506, 19506, 
19506, 19506, 19506, 19506, 19513, 19513, 19513, 19513, 19513, 
19513, 19513), class = "Date"), Status = c("ACx", "NACx", "PB", 
"Plan", "TL", "UB", "WB", "ACx", "NACx", "PB", "Plan", "TL", 
"UB", "WB", "ACx", "NACx", "PB", "Plan", "TL", "UB", "WB", "ACx", 
"NACx", "PB", "Plan", "TL", "UB", "WB", "ACx", "NACx", "PB", 
"Plan", "TL", "UB", "WB", "ACx", "NACx", "PB", "Plan", "TL", 
"UB", "WB"), Units = c(0, 7.13, 46.49, 298.03, 48.11, 20.25, 
166.12, 0, 12.87, 67, 298.03, 47, 38, 126.26, 0, 9, 66.27, 328.37, 
53.25, 90.25, 98.62, 0, 9.25, 53.13, 355.89, 53.11, 180.5, 45.13, 
4, 2.88, 0, 269.55, 6, 169.5, 0, 0, 0, 0, 355.89, 0, 0, 0)), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -42L), groups = structure(list(
    Week = structure(c(19478, 19485, 19492, 19499, 19506, 19513
    ), class = "Date"), .rows = structure(list(1:7, 8:14, 15:21, 
        22:28, 29:35, 36:42), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -6L), .drop = TRUE))

...和情节:

highchart() %>%
    hc_add_series(subset(df, Status == "Plan"), "column", grouping = FALSE, stack = "Plan", 
                  color = 'rgba(255, 255, 255, 0)', borderColor = "black",
                  hcaes(x = Week, y = round(Units, digits = 1), group = Status)) %>% 
    hc_add_series(subset(df, Status != "Plan"), type = 'column', grouping = FALSE, stack = "Activity", 
                  borderColor = "black", color = cols,
                  hcaes(y = Units, group=Status, x = Week)) %>% 
    hc_chart(plotBackgroundColor = "#F5F5F5") %>% 
    hc_plotOptions(series = list(stacking = "normal")) %>% 
    hc_xAxis(dateTimeLabelFormats = list(week = '%d-%b'), type = "datetime", 
             title = list(text = "Week Commencing"), gridLineWidth = 1, tickInterval = 604800000) %>% 
    hc_yAxis(title = list(text = "Activity)"))

cols <- c("ACx" = "#311432",
             "NACx" = "#a1045a",
             "WB" = "forestgreen",
             "TL" = "#D3D3D3",
             "PB" = "goldenrod",
             "UB" = "#bc544b")

非常感谢任何帮助。

r highcharts r-highcharter stacked-bar-chart
1个回答
0
投票

一个选项是将

Status
转换为
factor
,并按照您想要的顺序设置级别。之后你也可以根据这个顺序重新排序你的颜色。

library(highcharter)

levels <- c("TL","WB", "PB", "UB", "NACx", "ACx", "Plan")
df$Status <- factor(df$Status, rev(levels))

cols <- cols[levels(df$Status)]
cols <- cols[!is.na(names(cols))]

highchart() %>%
  hc_add_series(subset(df, Status == "Plan"), "column",
    grouping = FALSE, stack = "Plan",
    color = "rgba(255, 255, 255, 0)", borderColor = "black",
    hcaes(x = Week, y = round(Units, digits = 1), group = Status)
  ) %>%
  hc_add_series(subset(df, Status != "Plan"),
    type = "column", grouping = FALSE, stack = "Activity",
    borderColor = "black", color = cols,
    hcaes(y = Units, group = Status, x = Week)
  ) %>%
  hc_chart(plotBackgroundColor = "#F5F5F5") %>%
  hc_plotOptions(series = list(stacking = "normal")) %>%
  hc_xAxis(
    dateTimeLabelFormats = list(week = "%d-%b"), type = "datetime",
    title = list(text = "Week Commencing"), gridLineWidth = 1, tickInterval = 604800000
  ) %>%
  hc_yAxis(title = list(text = "Activity)"))

© www.soinside.com 2019 - 2024. All rights reserved.