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

如何在Highcharts/Highcharter中为十字线左侧曲线下方区域着色?

在Highcharts中实现密度曲线左侧区域着色(CDF可视化)

可以通过动态更新面积系列的方式实现这个效果,既简洁又流畅。核心思路是监听十字准线(crosshair)的移动事件,实时截取当前光标左侧的密度曲线数据,用一个面积系列填充该区域,直观展示CDF对应的面积占比。

修改后的代码如下:

library(highcharter)
library(htmlwidgets)

df <- data.frame(x = seq(-3, 3, 0.02),
                 pdf = dnorm(seq(-3, 3, 0.02)),
                 cdf = pnorm(seq(-3, 3, 0.02)))

hc <- highchart() |>
  # 基础密度曲线
  hc_add_series(df, "line", hcaes(x, pdf), name = "PDF", lineWidth = 2) |>
  # 初始为空的填充区域系列,用于展示左侧着色
  hc_add_series(data = list(), "area", hcaes(x, y = pdf), 
                name = "CDF 面积", color = "rgba(70, 130, 180, 0.3)",
                lineWidth = 0, enableMouseTracking = FALSE) |>
  hc_tooltip(
    headerFormat = "",
    pointFormat = "累积概率: <b>{point.cdf:.4f}</b>"
  ) |>
  hc_xAxis(crosshair = list(
    enabled = TRUE,
    label = list(enabled = TRUE)
  )) |>
  hc_yAxis(title = list(text = "概率密度"))

# 添加JS事件监听,动态更新填充区域
hc <- onRender(hc, "function(el, x) {
  var chart = this;
  var areaSeries = chart.series[1];
  
  // 监听十字准线移动事件
  chart.xAxis[0].on('afterSetExtremes', function(e) {
    if (e.trigger === 'crosshair') {
      var crosshairX = e.crosshair.pos;
      // 筛选出x <= 当前十字准线位置的数据点
      var filteredData = chart.series[0].data.filter(function(point) {
        return point.x <= crosshairX;
      });
      // 转换为Highcharts需要的点格式
      var newPoints = filteredData.map(function(point) {
        return [point.x, point.y];
      });
      // 添加原点(最小x, 0)和终点(crosshairX, 0),形成闭合区域
      newPoints.unshift([chart.xAxis[0].min, 0]);
      newPoints.push([crosshairX, 0]);
      // 更新面积系列数据
      areaSeries.setData(newPoints);
    }
  });
}")

hc

关键说明:

  • 新增一个面积系列作为填充层,初始无数据,通过enableMouseTracking = FALSE避免干扰交互;
  • 利用onRender函数注入JavaScript代码,监听十字准线的afterSetExtremes事件;
  • 每次十字准线移动时,筛选当前光标左侧的密度曲线数据,补充底部的原点和终点,形成闭合的填充区域,再更新面积系列的数据源;
  • 填充颜色使用半透明rgba值,既能区分区域又不遮挡原始曲线。

这个方案无需额外插件,完全基于Highcharts原生API实现,交互流畅且视觉效果直观,完美匹配你想要的CDF可视化需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:40:12