Skip to content

数据可视化(ECharts)

一、ECharts 基础

option 核心六件套

ECharts 通过声明式 option 描述图表,六个核心属性:title(标题)、legend(图例联动)、tooltip(悬浮提示)、xAxis/yAxis(坐标轴)、series(数据系列,决定图表类型和数据源)。

js
const option = {
  title: { text: '月销售额' },
  tooltip: { trigger: 'axis' },
  legend: { data: ['销售额', '利润'] },
  xAxis: { type: 'category', data: ['1月', '2月', '3月', '4月', '5月', '6月'] },
  yAxis: { type: 'value', name: '万元' },
  series: [
    { name: '销售额', type: 'line', data: [120, 132, 101, 134, 90, 230], smooth: true, areaStyle: {} },
    { name: '利润', type: 'bar', data: [20, 32, 11, 34, 20, 80] },
  ],
}
chart.setOption(option)

常用图表类型

图表series.type典型场景特有配置
折线图line趋势、时间序列smooth, areaStyle
柱状图bar分类对比stack, barWidth
饼图pie占比分布radius(环形), roseType
散点图scatter相关性分析symbolSize(气泡图)
热力图heatmap矩阵密度配合 visualMap

数据更新与响应式

setOption 第二个参数控制合并策略:默认 notMerge: false 深度合并(增量换数据),设为 true 完全替换(切换图表类型)。第三个参数 lazyUpdate 批量更新时延迟渲染。

js
chart.setOption({ series: [{ data: newData }] })          // 增量更新
chart.setOption(newOption, { notMerge: true })              // 完全替换
chart.setOption(opt, false, true); /* ... */; // 批量不立即渲染

ResizeObserver 自适应

ResizeObserver 精确监听容器尺寸变化调用 chart.resize(),比 window.resize 更精准(侧边栏展开/收起、flex 布局变化也能感知)。

ts
const observer = new ResizeObserver(() => chart.resize())
observer.observe(chartRef.value!)
// onBeforeUnmount: observer.disconnect(); chart.dispose()

二、进阶实战

大数据量优化

手段作用配置
large: true跳过图形元素创建,直接绘制路径折线/散点图适用
sampling: 'lttb'LTTB 降采样,视觉不失真配合 dataZoom 按需渲染
dataset多 series 共享数据源,避免重复传输option 顶层声明
js
const option = {
  dataset: { source: largeDataArray },
  series: [{ type: 'line', large: true, sampling: 'lttb', encode: { x: 0, y: 1 } }],
}

渲染器选择

维度Canvas(默认)SVG
大数据量✅ 性能好❌ DOM 过多卡顿
交互ECharts 事件系统原生 DOM 事件
缩放❌ 位图模糊✅ 矢量无损
初始化echarts.init(dom)echarts.init(dom, null, { renderer: 'svg' })

地图可视化

ECharts 不内置地图,需加载 GeoJSON 并 registerMap 注册:

js
echarts.registerMap('china', chinaGeoJSON)
const option = {
  geo: { map: 'china', roam: true, label: { show: true } },
  visualMap: { min: 0, max: 1000, inRange: { color: ['#e0f3f8', '#045a8d'] } },
  series: [{ type: 'map', map: 'china', data: [{ name: '广东', value: 800 }] }],
}

选型:中后台 Dashboard → ECharts(组件丰富、中文生态好);BI 分析 → AntV G2(图形语法灵活);海外轻量 → Chart.js(bundle 小);专业 GIS → Mapbox/deck.gl。

基于 VitePress 构建 · 内容持续更新