Highcharts 散点图

Highcharts 散点图(Scatter Chart)详解

Highcharts 的散点图是最适合展示两个数值变量之间关系(如相关性、分布、聚类、异常值检测)的图表类型。每个数据点用一个标记(默认圆点)表示,支持自定义标记形状、大小、颜色,并可轻松扩展为气泡图展示第三维度。

1. 基本散点图完整示例(多系列 + 缩放)

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>Highcharts 散点图示例</title>
    <script src="https://code.highcharts.com/highcharts.js"></script>
</head>
<body>
    <div id="container" style="width: 900px; height: 600px; margin: 50px auto;"></div>

    <script>
        Highcharts.chart('container', {
            chart: {
                type: 'scatter',                 // 关键:设置为 'scatter'
                zoomType: 'xy',                  // 支持 X 和 Y 轴同时拖拽缩放(强烈推荐)
                panning: true,                   // 允许平移
                panKey: 'shift',                 // 按住 Shift 键拖动
                backgroundColor: '#f8f9fa'
            },
            title: {
                text: '学生身高与体重关系散点图',
                style: { fontSize: '20px', fontWeight: 'bold' }
            },
            subtitle: {
                text: '蓝色:男生 | 红色:女生(模拟数据 n=120)'
            },
            xAxis: {
                title: { text: '身高 (cm)' },
                gridLineWidth: 1,
                min: 145,
                max: 205
            },
            yAxis: {
                title: { text: '体重 (kg)' },
                min: 35,
                max: 110
            },
            tooltip: {
                headerFormat: '<b>{series.name}</b><br>',
                pointFormat: '身高:{point.x} cm<br>体重:{point.y} kg'
            },
            plotOptions: {
                scatter: {
                    marker: {
                        radius: 6,
                        states: {
                            hover: {
                                radiusPlus: 5,
                                lineWidthPlus: 2
                            }
                        }
                    },
                    jitter: {                        // 轻微随机偏移,避免点完全重叠
                        x: 0.08,
                        y: 0.08
                    }
                }
            },
            series: [{
                name: '男生',
                color: '#7cb5ec',
                marker: { symbol: 'circle' },
                data: [
                    [168,62],[172,68],[175,72],[178,78],[180,82],
                    [182,85],[185,88],[188,92],[170,65],[173,70],
                    [176,74],[179,79],[181,83],[184,87],[187,91],
                    // ... 可继续添加更多数据
                ]
            }, {
                name: '女生',
                color: '#ff7f7f',
                marker: { symbol: 'triangle' },
                data: [
                    [158,48],[160,50],[162,52],[165,55],[168,58],
                    [155,45],[163,53],[167,57],[170,60],[159,49],
                    [161,51],[164,54],[166,56],[169,59],[157,47]
                    // ... 更多数据
                ]
            }]
        });
    </script>
</body>
</html>

2. 常用标记形状(symbol)选项

marker.symbol 中可设置:

  • 'circle'(默认)
  • 'square'
  • 'diamond'
  • 'triangle'
  • 'triangle-down'

示例:不同组别使用不同形状区分。

3. 添加回归趋势线(最常见需求)

Highcharts 原生不提供自动回归,但可手动添加一条 line 系列作为趋势线:

// 示例趋势线数据(实际可通过数学计算得出)
var trendData = [[150, 40], [200, 100]];

series: [
    // ... 你的散点系列
    {
        type: 'line',
        name: '线性趋势线',
        data: trendData,
        marker: { enabled: false },
        dashStyle: 'Dash',
        color: '#333333',
        lineWidth: 2,
        enableMouseTracking: false,  // 不显示 tooltip
        zIndex: 100
    }
]

4. 扩展为气泡图(展示第三维度)

只需引入 highcharts-more.js 并改为 type: 'bubble'

<script src="https://code.highcharts.com/highcharts-more.js"></script>
chart: { type: 'bubble', zoomType: 'xy' },
series: [{
    data: [
        { x: 170, y: 65, z: 25 },  // z 值越大,气泡越大
        { x: 175, y: 75, z: 40 },
        // ...
    ]
}]

5. 常用配置速查表

配置项说明与推荐值
chart.type'scatter'
chart.zoomType'xy'(大数据量或密集点时必开)
plotOptions.scatter.markerradius、symbol、states(自定义点样式)
plotOptions.scatter.jitter{ x: 0.05~0.1, y: 0.05~0.1 }(避免点重叠)
series.color / marker.symbol区分不同组别

6. 适用场景总结

  • 相关性分析(身高-体重、温度-销量、价格-满意度)
  • 异常点检测
  • 聚类展示(不同颜色/形状区分类别)
  • 与气泡图结合展示第三维度(如销量、人口)

如果你需要:

  • 大量数据点(上千点)的性能优化(引入 boost 模块)
  • 自动计算并显示回归线方程
  • 动态添加散点(实时轨迹)
  • 与箱线图(boxplot)组合展示分布

请告诉我具体需求,我可以提供完整可运行的代码示例!

文章已创建 3511

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部