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

echarts4R自定义坐标轴刻度与标签:实现正态/耿贝尔刻度需求

在echarts4R中实现自定义概率刻度X轴

问题说明

需要在echarts4R中为图表设置自定义X轴,显示正态(Normal)或耿贝尔(Gumbel)分布对应的概率刻度(例如将分布分位数对应的X轴位置替换为百分比概率标签)。尝试过ECharts文档提到的axisLabel.customValues,但该方式不支持文本标签;已通过ggplot2实现目标效果,现寻求echarts4R的对应实现方案。

ggplot2实现代码:

library(ggplot2)

probs <- c(0.5,0.2,0.1,0.05,0.02,0.01)

df <- data.frame(x = qnorm(1-probs),
                    y = sort(rnorm(6)))


ggplot(df) +
  geom_point(aes(x = x, y = y)) +
  scale_x_continuous(breaks = df$x,
                     labels = paste0(probs *100, "%"))

效果示例:
自定义概率刻度X轴效果

echarts4R实现方案

可以通过配置X轴的axisTick.data指定自定义刻度位置,配合axisLabel.formatter的JS回调函数设置对应文本标签,实现和ggplot2一致的效果:

library(echarts4R)
library(htmlwidgets)

# 定义概率数组
probs <- c(0.5,0.2,0.1,0.05,0.02,0.01)
# 构造数据:正态分布分位数作为X值,随机Y值
df <- data.frame(
  x = qnorm(1 - probs),
  y = sort(rnorm(6))
)

# 生成图表并配置自定义X轴
df |>
  e_charts(x) |>
  e_scatter(y) |>
  e_x_axis(
    # 指定自定义刻度的位置(对应正态分位数)
    axisTick = list(data = df$x),
    # 通过JS函数匹配刻度位置对应的概率标签
    axisLabel = list(
      formatter = JS(
        sprintf(
          "function(value, index) {
            const labels = [%s];
            return labels[index];
          }",
          paste0('"', paste0(probs*100, "%"), '"', collapse = ",")
        )
      )
    ),
    # 设置轴范围避免刻度被截断
    min = min(df$x) - 0.2,
    max = max(df$x) + 0.2,
    boundaryGap = FALSE
  )

耿贝尔分布适配

如果需要替换为耿贝尔(Gumbel)分布,只需将qnorm替换为对应分位数函数(例如evd包的qgumbel),其余代码逻辑保持不变:

library(evd)

# 耿贝尔分布分位数计算
df <- data.frame(
  x = qgumbel(1 - probs),
  y = sort(rnorm(6))
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:41:12