简介
ECharts 是百度开源的一个使用 JavaScript 实现的开源可视化库,它能够生动、可交互地展示数据。在 Vue3 项目中集成 ECharts 可以让你的项目更加直观和动态地呈现数据信息。
核心优势
特性 | SVG渲染器 | Canvas渲染器 |
---|---|---|
缩放保真度 | ★★★★★ | ★★☆☆☆ |
动态交互性能 | ★★☆☆☆ | ★★★★★ |
文字渲染质量 | ★★★★★ | ★★★☆☆ |
内存占用 | ★★☆☆☆ | ★★★★☆ |
Vue3集成方案
<template>
<div class="chart-container">
<!-- 响应式容器 -->
<div ref="chartRef" style="width: 400px; height: 300px;"></div>
</div>
</template>
<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue';
import * as echarts from 'echarts';
const chartRef = ref(null);
let chartInstance = null;
// 初始化图表
onMounted(() => {
chartInstance = echarts.init(chartRef.value, null, {
renderer: 'svg',
useDirtyRect: true // v6新增的脏矩形渲染优化
});
const option = {
animation: false, // SVG场景建议关闭动画
tooltip: {
trigger: 'axis',
textStyle: {
fontFamily: 'PingFang SC, Microsoft YaHei' // 中文字体优化
}
},
xAxis: { type: 'category' },
yAxis: { type: 'value' },
series: [{
type: 'line',
smooth: true,
lineStyle: {
width: 3, // SVG线条更精细
cap: 'round' // SVG特有线条端点样式
},
data: [120, 200, 150, 80, 70, 110, 130]
}]
};
chartInstance.setOption(option);
// v6新增的响应式API
const resizeObserver = new ResizeObserver(() => {
chartInstance.resize();
});
resizeObserver.observe(chartRef.value);
});
// 销毁处理
onBeforeUnmount(() => {
if (chartInstance) {
chartInstance.dispose();
}
});
</script>
<style scoped>
.chart-container {
background: #fff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
</style>
数据集转换系统(v6数据处理革命)
数据筛选(Filter)
企业级示例:
<script setup>
const salesData = [
['日期', '销售额', '利润率', '地区'],
['2023-01', 2350, 0.32, '华东'],
['2023-02', 1890, 0.28, '华北'],
['2023-03', 3020, 0.35, '华南']
];
const option = {
dataset: [{
source: salesData,
transform: [{
// 复合条件筛选
type: 'filter',
config: {
and: [
{ dimension: '销售额', '>': 2000 },
{ dimension: '利润率', '>': 0.3 }
]
}
}, {
// 结果排序
type: 'sort',
config: { dimension: '销售额', order: 'desc' }
}]
}],
series: [{
type: 'bar',
encode: {
x: '日期',
y: '销售额',
itemName: '地区'
}
}]
};
</script>
回归分析(Regression)
技术方案:
<script setup>
const rawData = [
['月份', '销量'],
[1, 12], [2, 19], [3, 23],
[4, 26], [5, 32], [6, 38]
];
const option = {
dataset: [{
source: rawData,
transform: {
type: 'regression',
config: {
method: 'linear',
formulaOn: 'end'
}
}
}],
series: [
{ type: 'scatter', datasetIndex: 0 },
{ type: 'line', datasetIndex: 1 }
]
};
</script>
性能优化方案
// 大数据量处理配置
{
dataset: {
transform: {
type: 'filter',
config: {...},
// v6新增的性能参数
large: true,
largeThreshold: 10000
}
}
}
常见问题解决方案
问题1:转换性能慢
方案:
{
progressive: true,
progressiveThreshold: 5000
}
问题2:动态更新失效
方案:
// 强制刷新转换管道
chart.setOption({
dataset: {
fromTransformResult: false
}
}, true);
架构升级(v6可视化增强)
多维度映射
<script setup>
const heatmapData = [
[12, 34, 1.2],
[23, 45, 3.4],
[56, 78, 5.6]
];
const option = {
dataset: { source: heatmapData },
visualMap: {
type: 'piecewise',
dimensions: [null, null, 2], // 第三维度映射
categories: ['低', '中', '高'],
inRange: {
color: ['#2c7bb6', '#abd9e9', '#fdae61']
}
},
series: {
type: 'heatmap',
encode: { x: 0, y: 1, value: 2 }
}
};
</script>
动态视觉通道
visualMap: {
type: 'continuous',
dimension: 1,
// v6新增的动态响应配置
controller: {
inRange: {
color: {
callback: function(value) {
return value > 50 ? '#d73027' : '#1a9850';
}
},
symbolSize: [10, 30]
}
}
}
最佳实践指南
- 配色方案选择:
// v6新增的色板
echarts.registerTheme('custom', {
color: ['#c23531','#2f4554','#61a0a8']
});
- 移动端适配:
visualMap: {
orient: 'horizontal',
left: 'center',
// v6新增的响应式布局
responsive: true
}
- 无障碍优化:
aria: {
label: {
description: '颜色越红表示数值越高'
}
}
国际化支持(全新)
v6新增:内置多语言支持
使用方式:
<script setup>
// 注册语言包
import * as echarts from 'echarts';
import 'echarts/i18n/langEN';
const chart = echarts.init(chartRef.value, null, {
locale: 'EN' // 使用英文显示
});
</script>
无障碍访问(全新)
v6特性:WAI-ARIA标准支持
配置示例:
<script setup>
const option = {
aria: {
enabled: true, // 启用无障碍
description: '销售数据趋势图' // 新增的图表描述
},
series: [{ type: 'line' }]
};
</script>
原文链接:https://code.ifrontend.net/archives/995,转载请注明出处。
评论0