You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Echarts4r自定义Tooltip如何实现数值右对齐?

复刻Echarts4r默认Tooltip并实现数值右对齐

想要复刻Echarts4r的默认Tooltip样式并添加额外内容,但自定义后系列名和数值均左对齐,可读性较差。以下是示例数据及尝试代码:

示例数据与原始尝试代码

library(dplyr)
library(echarts4r)
library(htmlwidgets)

set.seed(10)
data <- data.frame(name = rep(c("Bob", "Michael"), each = 10), 
                   x = rep(0:9, 2), 
                   y = sample(0:5, 20, replace = TRUE),
                   add = sample(1:100, 20, replace = TRUE))

# 默认Tooltip(数值右对齐)
data %>% 
  group_by(name) %>% 
  e_chart(x = x) %>% 
  e_line(serie = y) %>% 
  e_tooltip(trigger = "axis")

# 尝试复刻样式并添加内容的代码(数值左对齐,可读性差)
data %>% 
  group_by(name) %>% 
  e_chart(x = x) %>% 
  e_line(serie = y, bind = add) %>% 
  e_tooltip(trigger = "axis",
            formatter = JS("
              function(params){
              var colorSpan = color => `<span style='display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:` + color + `'></span>`;
              let rez = '<strong>Day ' + params[0].value[0] + '</strong>';
              
              params.forEach(item => {
                                       var xx  = '<br />' + colorSpan(item.color) + ' ' + item.seriesName + 
                                                 ' <strong>' + item.value[1] + '</strong> (' + item.name + ')';
                                       rez += xx;
                                     });
  
              return (rez)}"))

默认Tooltip的数值为右对齐,而自定义的Tooltip数值左对齐,可读性不佳。

修改后的解决方案

感谢@Russ提供的临时解决方案,在此基础上优化后实现了数值右对齐,修复后的代码如下:

# 为名称添加空格补全,保证系列名宽度一致
data <- data %>%
  mutate(nameAlt = stringr::str_pad(name, max(nchar(name)), "right"))

data %>% 
  group_by(nameAlt) %>% 
  e_chart(x = x) %>% 
  e_line(serie = y, bind = add) %>% 
  e_tooltip(trigger = "axis",
            formatter = JS("
              function(params){
              var colorSpan = color => `<span style='display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:` + color + `'></span>`;
              let rez = '<strong>Day ' + params[0].value[0] + '</strong><pre>';
              
              params.forEach(item => {
                                       var xx  = colorSpan(item.color)  + item.seriesName + 
                                                 '<span style=`float:right;margin-left:20px;`><strong>' + item.value[1] + '</strong> (' + item.name + ')</span></br>';
                                       rez += xx;
                                     });
              rez += '</pre>';
  
              return (rez)}")) %>% 
  # 移除图例中的多余空格,保证图例显示正常
  e_legend(formatter = JS("function(name){return(name.trim())}"))

修改后的Tooltip通过float:right实现数值右对齐,同时补全系列名宽度保证排版整齐,图例部分通过trim()去除多余空格,最终效果与默认Tooltip样式一致且添加了额外内容。

内容的提问来源于stack exchange,提问作者Darmist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:31:06