echarts4r绘制柱状图时e_visual_map颜色失效问题求助
修复echarts4r中e_visual_map颜色失效问题
问题描述
使用R语言的echarts4r包绘制柱状图时,发现e_visual_map()函数存在异常:从Market为aa的条目开始,柱状图颜色不再随Percent_Change数值变化。
测试数据
library(dplyr) library(viridis) library(echarts4r) df <- structure( list( Market = c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "aa", "bb", "cc", "dd", "ee", "ff", "gg", "hh", "ii", "jj", "kk", "ll", "mm", "nn", "oo", "pp", "qq", "rr", "ss", "tt", "uu", "vv"), Percent_Change = c(5.16901350940851, 3.91868856906443, 3.41802504497987, 3.16413673886071, 3.12684219659363, 2.89249688621206, 2.87284606849977, 2.84454222482254, 2.57058275282915, 2.43282934768581, 2.34818492965906, 2.30880001810456, 2.2918613260413, 2.24101659933832, 2.18752627680741, 2.10073586714032, 1.86045092759311, 1.85290305266011, 1.68128474330245, 1.54700002004653, 1.5303536712395, 1.52152376952798, 1.45917880532612, 1.4355692973819, 1.4257368870892, 1.36409659669896, 1.22315092771929, 1.04309133074753, 0.939025651002292, 0.844389462321624, 0.797407599768931, 0.681691408815433, 0.242176237950194, 0.237798995363376, 0.219182593926239, -0.0280421490193321, -0.111286439923117, -0.124395342178022, -0.175922623382462, -0.188080671185304, -0.870155958402443, -1.60611679230328, -1.66206110148814, -1.82732601610943, -3.68051100830324, -4.43292411223474, -9.42691532047856, -10.5405968097707)), row.names = c(NA, -48L), class = c("tbl_df", "tbl", "data.frame"))
原绘图代码
df %>% arrange(Percent_Change) %>% # mutate(Market = fct_reorder(Market, -Percent_Change)) %>% e_chart(Market) %>% e_bar(Percent_Change) %>% e_visual_map(Percent_Change, scale = e_scale, color = viridis(100)) %>% e_flip_coords() %>% e_legend(show = F) %>% e_color(background = c("#343E48"))
问题图示

修复方法
问题根源
原代码中e_visual_map()的scale = e_scale参数使用错误:e_scale是用于配置坐标轴刻度的独立函数,而e_visual_map的scale参数应为逻辑值(控制是否将数据缩放到0-1区间),错误的参数传入导致视觉映射在处理部分类别时失效。
修复后的代码方案
方案1:移除错误参数并手动指定数值范围
手动指定视觉映射的min和max为数据中Percent_Change的极值,确保视觉映射覆盖全部数据区间:
df %>% arrange(Percent_Change) %>% e_chart(Market) %>% e_bar(Percent_Change) %>% e_visual_map(Percent_Change, min = min(df$Percent_Change), max = max(df$Percent_Change), color = viridis(100)) %>% e_flip_coords() %>% e_legend(show = FALSE) %>% e_color(background = "#343E48")
方案2:正确使用scale参数(按需缩放)
如果需要将数据缩放到0-1区间,将scale参数设为TRUE即可:
df %>% arrange(Percent_Change) %>% e_chart(Market) %>% e_bar(Percent_Change) %>% e_visual_map(Percent_Change, scale = TRUE, color = viridis(100)) %>% e_flip_coords() %>% e_legend(show = FALSE) %>% e_color(background = "#343E48")
两种方案均可解决颜色不再随数值变化的问题,推荐方案1,因为它能更精确地匹配原始数据的数值范围,避免缩放带来的视觉偏差。
内容的提问来源于stack exchange,提问作者Ian.T
相关产品推荐
相关产品推荐

