如何用R实现Unicode字符水平条形图?解决拼接间隙问题
解决Unicode八分块条形图拼接间隙问题
问题根源在于paste()函数的默认行为:它会在拼接的字符串之间自动添加空格。只需要修改paste的参数,指定分隔符为空字符串就能消除间隙。
修改后的核心代码
build_bar <- function(value){ whole_part = paste(rep("\U2588",times=floor(value)), collapse = "") eighth_part <- bar_chars |> filter(amt == round_to_frac(value-floor(value),8)) |> pull(bar_char) # 关键:设置sep="",取消默认空格分隔 return(paste(whole_part, eighth_part, sep = "", collapse = "")) }
测试验证
运行修改后的函数,就能得到无间隙的条形图:
build_bar(2.7) #> [1] "██▊"
可选简化优化
可以用更简洁的写法替代重复的paste操作,同时处理小数部分为0的情况:
build_bar <- function(value){ whole <- floor(value) # 用strrep直接生成重复字符,比paste(rep(...))更简洁 whole_part <- strrep("\U2588", whole) frac <- round_to_frac(value - whole, 8) eighth_part <- if(frac > 0) bar_chars$bar_char[bar_chars$amt == frac] else "" # paste0默认无分隔符拼接,更直观 paste0(whole_part, eighth_part) }
内容的提问来源于stack exchange,提问作者Art
相关产品推荐
相关产品推荐

