在echarts4r散点图中,能否为离散X轴添加水平抖动?
在echarts4r散点图中为离散X轴添加水平抖动的实现方法
可以实现水平抖动,但echarts4r的jitter_amount参数默认仅对Y轴生效,要实现离散X轴的水平抖动,需要手动处理数据的X轴映射,具体步骤如下:
解决方案思路
离散X轴在ECharts底层会被转换为数值刻度,我们可以先将离散的X值转为对应的数值索引,给这些数值添加随机抖动后,再通过轴标签格式化把显示还原为原来的离散值。
代码示例
1. 处理数据,添加带抖动的X轴数值
library(echarts4r) library(tidyverse) df <- tibble(x = c("a", "a", "b", "b", "c", "c"), y = c(1, 2, 3, 3, 4, 5), z = c(1, 2, 3, 3, 4, 5)) # 将离散x转换为数值索引,并添加水平抖动(抖动范围可自行调整) df_jitter <- df |> mutate(x_num = as.integer(factor(x))) |> # 把a/b/c映射为1/2/3 mutate(x_jitter = x_num + runif(n(), min = -0.2, max = 0.2)) # 添加±0.2范围内的随机抖动
2. 绘制带水平抖动的散点图
df_jitter |> e_charts(x_jitter) |> e_scatter(y, symbol_size = 15) |> e_scatter(z, symbol_size = 15, symbol = "diamond") |> e_color(c("red", "blue")) |> # 配置X轴,还原离散标签显示 e_x_axis( formatter = JS("function(value) { const labels = ['a', 'b', 'c']; // 对应原数据的离散X值 return labels[Math.round(value) - 1]; }"), axisTick = list(alignWithLabel = TRUE), # 刻度与标签对齐 interval = 1, # 刻度间隔为1 min = 0.5, max = 3.5 # 调整轴范围,避免抖动点超出显示 )
说明
- 抖动范围可以通过调整
runif()的min和max参数来控制,比如改成±0.3会让抖动更明显。 - 如果离散X值更多,只需要修改
formatter里的labels数组,对应原数据的所有X类别即可。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

