echarts-for-weixin图表类型大全:18种可视化方案实现案例
你是否还在为微信小程序数据可视化发愁?想实现专业图表却受制于小程序环境限制?本文将系统讲解如何基于echarts-for-weixin实现18种主流图表,从基础柱状图到复杂桑基图,提供完整代码示例与场景适配方案,帮你一站式解决小程序可视化难题。
读完本文你将获得:
- 18种图表的完整实现代码(柱状图/折线图/饼图等)
- 小程序环境下的图表性能优化技巧
- 不同业务场景的图表选型指南
- 自定义图表样式的进阶方法
项目概述与基础配置
echarts-for-weixin是Apache ECharts的微信小程序适配版本,通过组件化方式让开发者能够在小程序中使用熟悉的ECharts配置语法创建可视化图表。该项目核心是ec-canvas组件,封装了小程序Canvas与ECharts的适配逻辑。
环境准备
# 获取项目代码
git clone https://gitcode.com/gh_mirrors/ec/echarts-for-weixin
项目目录结构中,ec-canvas为核心组件目录,pages目录下包含各类图表的实现示例,每种图表类型对应一个独立子目录。
基础使用流程
- 引入组件(在页面JSON文件中):
{
"usingComponents": {
"ec-canvas": "../../ec-canvas/ec-canvas"
}
}
- 创建画布(在WXML文件中):
<view class="container">
<ec-canvas id="mychart-dom" canvas-id="mychart" ec="{{ ec }}"></ec-canvas>
</view>
- 初始化图表(在JS文件中):
function initChart(canvas, width, height, dpr) {
const chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr
});
canvas.setChart(chart);
// 图表配置
const option = { /* 图表配置项 */ };
chart.setOption(option);
return chart;
}
Page({
data: {
ec: {
onInit: initChart
}
}
});
图表类型概览
echarts-for-weixin支持18种常见图表类型,覆盖大部分业务场景需求:
| 图表类别 | 包含类型 | 适用场景 |
|---|---|---|
| 基础图表 | 柱状图、折线图、饼图、散点图 | 数据比较、趋势展示、占比分析 |
| 统计图表 | 漏斗图、仪表盘、热力图、箱线图 | 转化率分析、指标监控、数据分布 |
| 关系图表 | 雷达图、桑基图、平行坐标系、树图 | 多维分析、流量分析、层级关系 |
| 地理图表 | 地图、K线图 | 区域数据、金融数据 |
| 特殊图表 | 主题河流图、旭日图、treemap | 时序数据、层级数据 |
基础图表类型实现
1. 柱状图(Bar Chart)
柱状图是最常用的数据比较图表,适用于展示分类数据的数值大小。echarts-for-weixin提供了丰富的柱状图配置选项,支持堆叠、分组、渐变等效果。
实现代码:
// pages/bar/index.js
import * as echarts from '../../ec-canvas/echarts';
function initChart(canvas, width, height, dpr) {
const chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr
});
canvas.setChart(chart);
const option = {
tooltip: {
trigger: 'axis',
axisPointer: { type: 'bar' },
confine: true // 限制tooltip在画布内显示
},
legend: { data: ['热度', '正面', '负面'] },
grid: {
left: 20, right: 20, bottom: 15, top: 40,
containLabel: true
},
xAxis: [{
type: 'value',
axisLine: { lineStyle: { color: '#999' } },
axisLabel: { color: '#666' }
}],
yAxis: [{
type: 'category',
axisTick: { show: false },
data: ['汽车之家', '新闻资讯平台', '百度贴吧', '一点资讯', '微信', '微博', '知乎'],
axisLine: { lineStyle: { color: '#999' } },
axisLabel: { color: '#666' }
}],
series: [
{
name: '热度',
type: 'bar',
label: { normal: { show: true, position: 'inside' } },
data: [300, 270, 340, 344, 300, 320, 310]
},
{
name: '正面',
type: 'bar',
stack: '总量',
label: { normal: { show: true } },
data: [120, 102, 141, 174, 190, 250, 220]
},
{
name: '负面',
type: 'bar',
stack: '总量',
label: { normal: { show: true, position: 'left' } },
data: [-20, -32, -21, -34, -90, -130, -110]
}
]
};
chart.setOption(option);
return chart;
}
Page({
data: { ec: { onInit: initChart } },
onShareAppMessage: function () {
return { title: 'ECharts 微信小程序示例', path: '/pages/index/index' };
}
});
2. 折线图(Line Chart)
折线图适用于展示数据随时间或类别变化的趋势,支持平滑曲线、面积填充等效果。
关键配置项:
smooth: true:开启平滑曲线areaStyle: {}:配置面积填充样式step: 'start'|'middle'|'end':配置阶梯线
实现示例:
// 折线图核心配置
series: [{
name: 'A',
type: 'line',
smooth: true,
data: [18, 36, 65, 30, 78, 40, 33]
}, {
name: 'B',
type: 'line',
smooth: true,
data: [12, 50, 51, 35, 70, 30, 20]
}, {
name: 'C',
type: 'line',
smooth: true,
data: [10, 30, 31, 50, 40, 20, 10]
}]
3. 饼图(Pie Chart)
饼图用于展示分类数据的占比关系,支持环形图、南丁格尔图等变种。
实现示例:
// 饼图核心配置
series: [{
type: 'pie',
center: ['50%', '50%'],
radius: ['20%', '40%'], // 环形图配置,内半径和外半径
data: [
{ value: 55, name: '北京' },
{ value: 20, name: '武汉' },
{ value: 10, name: '杭州' },
{ value: 20, name: '广州' },
{ value: 38, name: '上海' }
]
}]
4. 散点图(Scatter Chart)
散点图用于展示两个变量之间的关系,可通过点的大小和颜色表示更多维度的数据。
实现示例:
// 散点图核心配置
series: [
{
type: 'scatter',
name: '数据组1',
data: [[10, 20, 30], [40, 50, 60], [70, 80, 90]] // [x, y, size]
},
{
name: '数据组2',
type: 'scatter',
data: [[15, 25, 35], [45, 55, 65], [75, 85, 95]]
}
],
visualMap: {
show: false,
max: 100,
inRange: { symbolSize: [20, 70] } // 根据第三维度数据调整点大小
}
统计图表类型实现
5. 漏斗图(Funnel Chart)
漏斗图常用于转化率分析,展示从初始阶段到最终阶段的用户转化情况。
实现示例:
// 漏斗图核心配置
series: [
{
name: '漏斗图',
type: 'funnel',
width: '40%',
height: '45%',
data: [
{ value: 100, name: '展现' },
{ value: 80, name: '点击' },
{ value: 60, name: '访问' },
{ value: 30, name: '咨询' },
{ value: 10, name: '订单' }
]
},
{
name: '金字塔', // 倒漏斗图(金字塔)
type: 'funnel',
width: '40%',
height: '45%',
sort: 'ascending', // 升序排列实现金字塔效果
data: [
{ value: 10, name: '订单' },
{ value: 30, name: '咨询' },
{ value: 60, name: '访问' },
{ value: 80, name: '点击' },
{ value: 100, name: '展现' }
]
}
]
6. 仪表盘(Gauge Chart)
仪表盘适用于展示关键指标的完成度,直观反映指标当前状态与目标值的关系。
实现示例:
// 仪表盘核心配置
series: [{
name: '业务指标',
type: 'gauge',
detail: { formatter: '{value}%' }, // 显示百分比
data: [{ value: 40, name: '完成率' }]
}]
7. 热力图(Heatmap)
热力图通过颜色变化展示数据的密度或强度分布,适用于用户行为分析、数据密度展示等场景。
实现要点:
- 使用二维数组表示热力图数据
- 通过visualMap配置颜色映射规则
- 可配合日历坐标系展示时间序列热力图
地理与关系图表实现
8. 地图(Map)
地图用于展示区域相关数据,支持省级、市级等多级行政区划。
实现示例:
// 地图核心配置
import geoJson from './mapData.js'; // 导入地理数据
echarts.registerMap('henan', geoJson); // 注册地图数据
option = {
tooltip: {
trigger: 'item',
formatter: '{b}: {c}' // 显示区域名称和数值
},
visualMap: {
min: 0,
max: 100,
calculable: true,
inRange: { color: ['#fff', '#389BB7'] } // 颜色渐变范围
},
series: [{
type: 'map',
mapType: 'henan', // 使用已注册的地图
label: { normal: { show: true } },
data: [
{ name: '郑州市', value: 100 },
{ name: '洛阳市', value: 80 },
{ name: '开封市', value: 60 }
// 更多区域数据...
]
}]
};
9. 雷达图(Radar Chart)
雷达图用于展示多维度数据,比较不同对象在各维度上的表现。
实现示例:
// 雷达图核心配置
radar: {
indicator: [
{ name: '食品', max: 500 },
{ name: '玩具', max: 500 },
{ name: '服饰', max: 500 },
{ name: '绘本', max: 500 },
{ name: '医疗', max: 500 },
{ name: '门票', max: 500 }
]
},
series: [{
name: '预算 vs 开销',
type: 'radar',
data: [
{ value: [430, 340, 500, 300, 490, 400], name: '预算' },
{ value: [300, 430, 150, 300, 420, 250], name: '开销' }
]
}]
10. 桑基图(Sankey Diagram)
桑基图用于展示流量分布和关系,特别适合展示能源、资金、用户等的流动情况。
实现示例:
// 桑基图核心配置
series: {
type: 'sankey',
layout: 'none',
data: [
{ name: 'a' }, { name: 'b' }, { name: 'a1' },
{ name: 'a2' }, { name: 'b1' }, { name: 'c' }
],
links: [
{ source: 'a', target: 'a1', value: 5 },
{ source: 'a', target: 'a2', value: 3 },
{ source: 'b', target: 'b1', value: 8 },
{ source: 'a', target: 'b1', value: 3 }
]
}
图表性能优化与最佳实践
性能优化技巧
- 按需引入ECharts模块:
// 仅引入需要的模块,减小文件体积
import * as echarts from '../../ec-canvas/echarts.simple';
-
数据分片加载: 对于大数据量图表,采用分片加载策略,初始只加载部分数据,滚动时再加载更多数据。
-
懒加载实现:
// pages/lazyLoad/index.js示例
Page({
data: {
ec: {
onInit: null // 初始不加载图表
}
},
onReady() {
// 页面就绪后延迟加载图表
setTimeout(() => {
this.setData({
ec: {
onInit: initChart // 初始化图表
}
});
}, 1000);
}
});
图表选型指南
| 数据类型 | 推荐图表类型 | 不推荐图表类型 |
|---|---|---|
| 分类比较 | 柱状图、条形图 | 饼图(类别>5个时) |
| 时间趋势 | 折线图、面积图 | 散点图 |
| 占比分析 | 饼图、环形图 | 折线图 |
| 分布关系 | 散点图、热力图 | 漏斗图 |
| 多维比较 | 雷达图、平行坐标 | 单一柱状图 |
| 流量分析 | 桑基图、漏斗图 | 饼图 |
常见问题解决方案
- 图表模糊问题: 确保设置正确的devicePixelRatio:
echarts.init(canvas, null, {
devicePixelRatio: dpr // 使用传入的dpr参数
});
- tooltip显示异常: 设置confine: true限制tooltip在画布内显示:
tooltip: {
confine: true,
formatter: '{b}: {c}'
}
- 文件体积过大: 使用ECharts在线定制工具只包含必要组件: 访问ECharts官网 -> 定制下载 -> 选择所需组件 -> 替换ec-canvas/echarts.js
18种图表类型速查表
| 图表类型 | 核心配置 | 应用场景 |
|---|---|---|
| 柱状图 | type: 'bar' | 分类数据比较 |
| 折线图 | type: 'line' | 趋势变化分析 |
| 饼图 | type: 'pie' | 占比分析 |
| 散点图 | type: 'scatter' | 相关性分析 |
| 漏斗图 | type: 'funnel' | 转化率分析 |
| 仪表盘 | type: 'gauge' | 指标监控 |
| 热力图 | type: 'heatmap' | 密度分布展示 |
| 地图 | type: 'map' | 区域数据展示 |
| 雷达图 | type: 'radar' | 多维数据比较 |
| 桑基图 | type: 'sankey' | 流量关系分析 |
| K线图 | type: 'candlestick' | 金融数据展示 |
| 箱线图 | type: 'boxplot' | 数据分布统计 |
| 平行坐标 | type: 'parallel' | 多维度分析 |
| 树图 | type: 'tree' | 层级关系展示 |
| 主题河流图 | type: 'themeRiver' | 时序数据变化 |
| 旭日图 | type: 'sunburst' | 层级数据可视化 |
| 矩形树图 | type: 'treemap' | 层级数据占比展示 |
| 组合图表 | 多series组合 | 复杂数据展示 |
总结与展望
echarts-for-weixin为微信小程序提供了强大的数据可视化能力,通过本文介绍的18种图表实现方案,开发者可以应对绝大多数业务场景的可视化需求。随着小程序生态的不断发展,echarts-for-weixin也在持续优化,未来将支持更多交互功能和图表类型。
建议开发者在实际项目中:
- 根据数据特点选择合适的图表类型
- 关注性能优化,特别是在数据量大的场景
- 保持echarts.js文件为最新版本以获得更好支持
- 结合业务需求自定义图表样式,提升用户体验
掌握这些图表实现方案后,你可以轻松构建出专业级的数据可视化小程序,为用户提供直观、清晰的数据洞察。
如果觉得本文有帮助,请点赞、收藏、关注三连支持,下期将带来"echarts-for-weixin高级定制实战",敬请期待!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



