0

我正在制作一张gt表格,显示个人朝着目标迈进的进度。在表格中,有一行显示了实现该目标的水平条形图(如果目标为 50 且得分为 40,则条形为 80%)。

但是,当我使用参数更改 gt 行groupname_col的顺序时,其他单元格的顺序会更改,但gtExtras gt_plt_bar_pct列的顺序不会更改,因此它显示了该行中名称和分数的错误条,而是列似乎总是按输入数据中的行顺序表示。

我知道我可以通过arrange在开始之前在 df 上使用来解决这个问题gt,但这似乎不是一个好的解决方案,因为我想要更改行的顺序以由不同的组查看。这是一个缺陷gtExtras吗?有更好的解决方法吗?

谢谢!

代表:

library(tibble)
library(gt)
library(gtExtras)
library(dplyr) 

# make dataframe of individuals and their goals
df <- tribble(
  ~name, ~group, ~score, ~goal,
    "Bob", "C",   20,   40,
    "Chris",  "A", 50,   40,
    "Dale",  "B",  30,   50,
    "Jay",    "A", 0,   40,
     "Ben",   "B", 10,   20
  
) %>%
  # calculate percent towards goal, and cap at 100%
  mutate(percent_to_goal = score/goal *100,
         percent_to_goal = case_when(percent_to_goal >= 100 ~ 100,
                                     TRUE ~ percent_to_goal))


df %>%
  
  # this fixes the issue, but doesn't seem like a permanent solution
  #arrange(group, name) %>%
  
  # make gt table
  gt(rowname_col = "name", groupname_col = "group") %>%
  
  # order groups
  row_group_order(groups = c("A","B","C")) %>%
  
  # add bar chart column
  gt_plt_bar_pct(column = percent_to_goal)  %>%
  
  # highlight blue if person reaches their goal
  tab_style(
    style = list(
      cell_fill(color = "lightcyan"),
      cell_text(weight = "bold")),
    locations = cells_body(
      columns = c(goal,score, percent_to_goal),
      rows = score >= goal
    )
  ) 

这是上述代码的输出:请注意,条形图的长度并不总是反映它们出现的行的值。相反,它们反映了原始数据集的顺序。 输出原始代码

编辑:删除row_group_order. 如果我再次运行上述代码,但注释掉旨在重新排列组外观的行,则分组以不同的顺序显示(原始数据集中组的出现顺序),名称和前两列排序为这些组相应地,但条形图列仍然没有,并且保持数据集的原始顺序。下图:

没有 row_group_order 的输出

4

0 回答 0