首先需要在项目中引入 ECharts 库,示例中使用 CDN 方式引入:
<!-- 在 head 标签中引入 ECharts -->
<script src="https://registry.npmmirror.com/echarts/5.5.1/files/dist/echarts.min.js"></script>
如果是 Vue 工程化项目,也可以通过 npm 安装:
npm install echarts
然后在组件中导入:
import echarts from 'echarts'
在模板中定义图表容器,通常使用 div 元素,并通过 ref 属性方便 Vue 实例获取该元素:
<!-- 图表容器 -->
<div class="charts-container">
<!-- 柱状图 -->
<div class="chart-box">
<div class="chart-header">
<h4 class="chart-title">柱状图</h4>
</div>
<div class="chart-content">
<div class="chart-canvas" ref="barChart"></div>
</div>
</div>
<!-- 折线图 -->
<div class="chart-box">
<div class="chart-header">
<h4 class="chart-title">折线图</h4>
</div>
<div class="chart-content">
<div class="chart-canvas" ref="lineChart"></div>
</div>
</div>
</div>
在 Vue 实例的 mounted 钩子中初始化图表,确保 DOM 已加载完成:
mounted() {
this.initCharts(); // 初始化 ECharts 图表
},
methods: {
initCharts() {
// 初始化柱状图实例
if (this.$refs.barChart) {
this.barChartInstance = echarts.init(this.$refs.barChart);
this.renderBarChart(); // 渲染图表
}
// 初始化折线图
if (this.$refs.lineChart) {
this.lineChartInstance = echarts.init(this.$refs.lineChart);
this.renderLineChart();
}
}
}
每个图表类型需要定义对应的配置项(option),然后通过 setOption 方法渲染:
renderBarChart() {
const option = {
backgroundColor: 'transparent', // 透明背景,适应 Three.js 场景
grid: { // 图表网格边距
left: '5%',
right: '2%',
top: '10%',
bottom: '10%',
containLabel: true
},
xAxis: { // X轴配置
type: 'category',
data: ['一月', '二月', '三月', '四月', '五月', '六月', '七月'],
axisLabel: {
color: '#e6e6e6', // 文字颜色(适应深色背景)
fontSize: 11
}
},
yAxis: { // Y轴配置
type: 'value',
axisLine: {
lineStyle: {
color: '#a0a0e0'
}
}
},
series: [ // 数据系列
{
name: '销售额',
type: 'bar',
data: [320, 432, 501, 634, 590, 730, 820]
}
]
};
this.barChartInstance.setOption(option);
}
确保窗口大小变化时图表自适应:
onWindowResize() {
// Three.js 相机和渲染器调整...
// 同步更新图表大小
if (this.barChartInstance) this.barChartInstance.resize();
if (this.lineChartInstance) this.lineChartInstance.resize();
}
在组件销毁前释放 ECharts 资源,避免内存泄漏:
beforeDestroy() {
// 移除事件监听
window.removeEventListener('resize', this.onWindowResize);
// 销毁图表实例
if (this.barChartInstance) this.barChartInstance.dispose();
if (this.lineChartInstance) this.lineChartInstance.dispose();
}
ECharts 与 Three.js 的结合,为数据可视化提供了新的可能性。通过在 3D 场景中集成数据图表,可以创建更加丰富和直观的数据展示界面。