如何在R语言sparkline包中为非最值观测值设置点颜色?
解决Sparkline包中显示非最值点颜色的问题
要让Sparkline显示除最大值、最小值之外的点,必须通过valueSpots参数传递范围-颜色映射的命名列表——直接传入颜色字符串无效,因为该参数需要对应jQuery Sparkline中「键为范围表达式、值为颜色」的对象结构。
具体实现代码
针对你的固定数据集,可以直接硬编码范围:
y <- 1:3 x <- c(2000, 2019, 2020) # 定义各值范围对应的点颜色 spot_mapping <- list( ":1" = "green", # 小于等于1(最小值)的点设为绿色 "2:2" = "black", # 等于2的点设为黑色 "3:" = "red" # 大于等于3(最大值)的点设为红色 ) sparkline::sparkline(y, xvalues = x, valueSpots = spot_mapping)
如果需要适配动态变化的数据集,可通过计算生成范围表达式,避免硬编码:
y <- 1:3 x <- c(2000, 2019, 2020) y_min <- min(y) y_max <- max(y) # 动态生成中间值的范围表达式 middle_range <- paste0(y_min + 1, ":", y_max - 1) # 使用rlang语法动态命名列表元素 spot_mapping <- list( paste0(":", y_min) = "green", !!middle_range := "black", paste0(y_max, ":") = "red" ) sparkline::sparkline(y, xvalues = x, valueSpots = spot_mapping)
关键说明
valueSpots的键是范围表达式,支持以下格式::n:小于等于n的值n::大于等于n的值n:m:介于n和m之间的值(包含两端)
- 若已通过
maxSpotColor和minSpotColor设置了最值颜色,也可只在valueSpots中定义中间值的映射,两种设置可共存。
内容的提问来源于stack exchange,提问作者Gonzalo T F
相关产品推荐
相关产品推荐

