使用微信小程序开发可视化效果 使用echarts和ec-canvas标签实现,数据的结构为 // 定义数据结构 let data = { '地区': { '广东': { '未上过学': { '合计': 100, '男': 50, '女': 50 }, '小学': { '合计': 400, '男': 200, '女': 200 }, // ...其他受教育程度 }, '广西': { '未上过学': { '合计': 50, '男': 25, '女': 25 }, '小学': { '合计': 500, '男': 250, '女': 250 }, // ... } } }; 实现一个柱状图当中的折柱混合,根据性别和地区两个指标分不同颜色,柱子为同一个地区(男和女)堆叠在同一个柱子,不同地区的则多一个柱子,折线为一个同一个地区同一个学历的合计数,y轴为人数,x轴为受教育程度,请写出示例代码
时间: 2024-01-21 21:03:07 浏览: 61
以下是使用 echarts 和 ec-canvas 标签实现的示例代码:
1. 在 wxml 文件中添加 ec-canvas 标签:
```
<view class="chart">
<ec-canvas canvas-id="mychart" ec="{{ ec }}"></ec-canvas>
</view>
```
2. 在 js 文件中引入 echarts 并定义数据和绘制图表的方法:
```
import * as echarts from '../../ec-canvas/echarts';
Page({
data: {
ec: {
lazyLoad: true // 延迟加载
},
data: {
'地区': {
'广东': {
'未上过学': {
'合计': 100,
'男': 50,
'女': 50
},
'小学': {
'合计': 400,
'男': 200,
'女': 200
},
// ...其他受教育程度
},
'广西': {
'未上过学': {
'合计': 50,
'男': 25,
'女': 25
},
'小学': {
'合计': 500,
'男': 250,
'女': 250
},
// ...其他受教育程度
}
}
}
},
onLoad: function () {
this.initChart();
},
initChart() {
this.selectComponent('#mychart').init((canvas, width, height) => {
// 初始化 echarts 实例
const chart = echarts.init(canvas, null, {
width: width,
height: height
});
// 设置图表的配置项和数据
chart.setOption(this.getOption());
// 将图表实例绑定到 this 上,方便在其他方法中调用
this.chart = chart;
// 返回 chart 实例,供其他方法调用
return chart;
});
},
getOption() {
const data = this.data.data;
const legends = ['男', '女'];
const xData = []; // x轴数据
const seriesData1 = []; // 男数据
const seriesData2 = []; // 女数据
const seriesData3 = []; // 折线数据
let seriesIndex = 0;
// 遍历地区和受教育程度
for (let region in data['地区']) {
for (let level in data['地区'][region]) {
if (level === '合计') continue; // 合计不需要绘制
// 处理 x 轴数据
if (!xData.includes(level)) {
xData.push(level);
}
// 处理男女数据
const item = data['地区'][region][level];
seriesData1[seriesIndex] = seriesData1[seriesIndex] || 0;
seriesData2[seriesIndex] = seriesData2[seriesIndex] || 0;
seriesData1[seriesIndex] += item['男'];
seriesData2[seriesIndex] += item['女'];
// 处理折线数据
if (seriesIndex === 0) {
seriesData3.push(item['合计']);
} else {
seriesData3[seriesIndex] += item['合计'];
}
seriesIndex++;
}
seriesIndex++;
}
// 配置项
const option = {
color: ['#FFB6C1', '#87CEFA'],
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
legend: {
data: legends
},
grid: {
top: 'middle',
left: '3%',
right: '3%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'category',
data: xData
},
yAxis: [{
type: 'value',
name: '人数'
}, {
type: 'value',
name: '合计',
axisLabel: {
formatter: '{value} 人'
}
}],
series: [{
name: '男',
type: 'bar',
stack: '地区',
data: seriesData1
}, {
name: '女',
type: 'bar',
stack: '地区',
data: seriesData2
}, {
name: '合计',
type: 'line',
yAxisIndex: 1,
data: seriesData3
}]
};
return option;
}
});
```
3. 在 wxss 文件中设置图表样式:
```
.chart {
height: 400px;
width: 100%;
}
```
注意:以上代码仅供参考,实际使用时需要根据数据结构和需求进行适当调整。
阅读全文