求R中可在表格内用横向条形展示数据范围的工具包
静态表格中嵌入横向范围条形的实现方案
方法一:gt + ggplot(推荐,视觉效果可控)
先构造模拟你数据结构的示例数据,再通过自定义函数生成每行的范围条形小图,最后用gt包整合为表格。
library(tidyverse) library(gt) # 模拟实验数据 df <- tibble( 实验编号 = c("Exp1", "Exp2", "Exp3", "Exp4"), 施肥量下限 = c(0, 200, 64, 100), 施肥量上限 = c(150, 300, 64, 250), 作物品种 = c("小麦", "玉米", "水稻", "大豆") ) # 生成横向范围条形的函数 create_range_bar <- function(min_val, max_val, total_range = c(0, 300)) { ggplot() + # 绘制范围线段 geom_segment(aes(x = min_val, xend = max_val, y = 0, yend = 0), color = "#2c3e50", size = 3) + # 标记下限点(红色)和上限点(绿色) geom_point(aes(x = min_val, y = 0), color = "#e74c3c", size = 2) + geom_point(aes(x = max_val, y = 0), color = "#27ae60", size = 2) + xlim(total_range) + theme_void() + theme(plot.margin = margin(2, 2, 2, 2)) } # 给每行生成对应的条形图 df <- df %>% mutate(施肥量范围条形 = map2(施肥量下限, 施肥量上限, create_range_bar)) # 生成最终静态表格 gt(df) %>% cols_hide(columns = c(施肥量下限, 施肥量上限)) %>% fmt_markdown(columns = 施肥量范围条形) %>% tab_header(title = "实验施肥量范围展示") %>% cols_label( 实验编号 = "实验编号", 作物品种 = "作物品种", 施肥量范围条形 = "施肥量范围(kg/ha)" )
这个方案能清晰区分范围区间和单个值(单个值会显示为一个点),你可以通过调整create_range_bar函数里的颜色、线段粗细、点大小等参数,自定义视觉样式。
方法二:formattable(纯CSS实现,轻量简洁)
如果追求轻量,也可以用formattable通过自定义CSS样式实现范围条形:
library(formattable) # 自定义范围条形格式化函数 range_bar_formatter <- function(min_val, max_val, width = 120) { # 总刻度范围匹配你的数据区间0-300 scale_max <- 300 if (min_val == max_val) { # 单个值:显示定位点 pos <- (min_val / scale_max) * width span(style = sprintf("display: inline-block; width: 8px; height: 12px; margin-left: %.1fpx; background-color: #2c3e50;", pos)) } else { # 范围值:显示区间条 bar_width <- ((max_val - min_val) / scale_max) * width margin_left <- (min_val / scale_max) * width span(style = sprintf("display: inline-block; width: %.1fpx; height: 12px; margin-left: %.1fpx; background-color: #2c3e50;", bar_width, margin_left)) } } # 生成表格 formattable(df, list( 施肥量范围 = formatter("span", x ~ range_bar_formatter(施肥量下限, 施肥量上限)) ))
这个方案不需要依赖ggplot,适合快速生成简单的范围条形。
内容的提问来源于stack exchange,提问作者Nicola J
相关产品推荐
相关产品推荐

