Highcharts 散点图

Highcharts 散点图(Scatter Chart)详解

Highcharts 中的散点图(Scatter Chart)用于展示两个变量之间的关系,非常适合显示数据点的分布、相关性、聚类或异常值(如身高与体重、温度与销量等)。它默认使用圆点标记数据点,支持自定义标记形状、大小、颜色等。

主要类型

  • scatter:基本散点图
  • bubble:气泡图(需引入 highcharts-more.js,第三个维度用气泡大小表示)
  • scatter with regression line:散点 + 回归线(需自定义或使用插件)

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'
                backgroundColor: '#f8f9fa',
                zoomType: 'xy'                   // 支持鼠标拖拽缩放(非常实用)
            },
            title: {
                text: '学生身高与体重关系散点图',
                style: { fontWeight: 'bold', fontSize: '20px' }
            },
            subtitle: {
                text: '数据来源:模拟数据(n=50)'
            },
            xAxis: {
                title: { text: '身高 (cm)' },
                startOnTick: true,
                endOnTick: true,
                showLastLabel: true,
                min: 150,
                max: 200
            },
            yAxis: {
                title: { text: '体重 (kg)' },
                min: 40,
                max: 100
            },
            tooltip: {
                formatter: function () {
                    return '<b>' + this.point.name + '</b><br/>' +
                           '身高: ' + this.x + ' cm<br/>' +
                           '体重: ' + this.y + ' kg';
                }
            },
            plotOptions: {
                scatter: {
                    marker: {
                        radius: 6,               // 点大小
                        symbol: 'circle',        // 标记形状:circle, square, diamond, triangle 等
                        states: {
                            hover: {
                                enabled: true,
                                lineColor: '#000',
                                radius: 9
                            }
                        }
                    },
                    jitter: {                    // 轻微抖动,避免点重叠
                        x: 0.1,
                        y: 0.1
                    }
                }
            },
            series: [{
                name: '男生',
                color: '#7cb5ec',
                data: [
                    [165, 58], [168, 62], [170, 65], [172, 68], [175, 72],
                    [178, 75], [180, 80], [182, 85], [185, 88], [188, 92],
                    // ... 更多数据
                ]
            }, {
                name: '女生',
                color: '#ff7f7f',
                data: [
                    [155, 45], [158, 48], [160, 50], [162, 52], [165, 55],
                    [168, 58], [170, 60], [172, 62], [175, 65], [178, 68]
                    // ... 更多数据
                ]
            }]
        });
    </script>
</body>
</html>

2. 多系列 + 自定义标记形状

series: [{
    name: '类型A',
    marker: { symbol: 'triangle' },
    data: [[...]]
}, {
    name: '类型B',
    marker: { symbol: 'diamond' },
    data: [[...]]
}]

3. 气泡图(Bubble Chart)——三维数据展示

需额外引入模块:

<script src="https://code.highcharts.com/highcharts-more.js"></script>
chart: { type: 'bubble', zoomType: 'xy' },
series: [{
    name: '国家数据',
    data: [
        { x: 95, y: 75, z: 8500, name: '美国' },    // x: GDP, y: 预期寿命, z: 人口(气泡大小)
        { x: 85, y: 70, z: 1400, name: '中国' },
        { x: 70, y: 65, z: 1200, name: '印度' }
        // 数据格式:[x, y, z] 或对象
    ],
    marker: {
        fillOpacity: 0.6
    }
}]

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

Highcharts 原生不支持趋势线,但可通过添加 line 系列模拟:

// 先计算回归线数据(这里用简单示例,实际可用 math.js 或手动计算)
var regressionData = [[150, 40], [200, 100]];  // 模拟趋势线点

series: [
    // ... 散点系列
    {
        type: 'line',
        name: '趋势线',
        data: regressionData,
        marker: { enabled: false },
        dashStyle: 'Dash',
        color: '#000000',
        enableMouseTracking: false
    }
]

5. 常用配置总结

配置项说明与推荐值
chart.type‘scatter’(基本散点) / ‘bubble’(气泡图)
chart.zoomType‘xy’(强烈推荐开启,便于查看密集点)
plotOptions.scatter.markerradius/symbol/states(自定义点样式)
plotOptions.scatter.jitter{ x: 0.1, y: 0.1 }(避免点完全重叠)
tooltip.formatter自定义提示内容
series.regressiontrue(需引入 regression 模块实现自动趋势线)

6. 适用场景对比

图表类型适用场景
scatter两个变量关系、相关性分析、异常点检测
bubble三个变量(x、y、大小)展示,如国家经济数据
line/spline时间趋势

如果你需要:

  • 气泡图完整示例
  • 自动回归趋势线(带公式)
  • 大数据量散点优化(使用 boost 模块)
  • 与箱线图结合

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

文章已创建 3511

发表回复

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

相关文章

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

返回顶部