1.先來個效果圖

這里我用的是插件@antv/f2-canvas(安裝的方法如下)
npm init 此處如果直接使用官方npm install 可能會出現沒有node_modules錯誤
npm install --production 建議使用–production選項,可以減少安裝一些業務無關的 npm 包,從而減少整個小程序包的大小
npm i @antv/f2-canvas 安裝微信小程序 F2 圖表組件
安裝好依賴包之后,運行 (點擊開發者工具頂部詳情,勾選 使用npm模塊,再點擊菜單欄中工具下的構建npm即可運行)

json文件里加這個
"usingComponents": {
"ff-canvas": "@antv/f2-canvas"
}
js文件
const F2 = require('@antv/wx-f2');
let chart = null;
page({
data:{
opts: {
lazyLoad: true
},
},
// 折線圖
getMothElectro: function (type) {
let that = this;
// 體重曲線表
app.post('/user/Charts', {
type: type
}).then((res) => {
// console.log(res)
that.setData({
list: res.data.list
})
//這里是把后台返的數據做一下處理
let arr = [];
let array1 = [];
let array2 = [];
let weightArr = [];
// for (let value of res.chart) {
for (let i = 0; i < res.chart.length; i++) {
let value = res.chart[i];
if (value.weight == '') {
value.weight = null;
} else {
value.weight = value.weight;
weightArr.push(value.weight);
}
let item = {
city: '',
date: value.date,
areaValue: [(value.low.toFixed(2)) * 1, value.hign.toFixed(2) * 1]
}
let item1 = {
city: '',
date: value.date,
weight: value.weight
}
array1.push(item)
array2.push(item1)
arr = array1.concat(array2)
}
this.chartComponent = this.selectComponent('#column-dom');
this.chartComponent.init((canvas, width, height) => {
//這里是計算y軸坐標可以跟着數據變,區間小一點,自適應數據
var min = ((Math.min.apply(Math, weightArr)).toFixed(1)) * 1;
var max = ((Math.max.apply(Math, weightArr)).toFixed(1)) * 1;
if (max - min <= 10) {
max = max + 2;
}
if (min % 5 == 0) {
min = min - 2;
}
if (min > res.chart[0].low) {
min = parseInt(res.chart[0].low);
}
if (max < res.chart[res.chart.length - 1].hign) {
max = parseInt(res.chart[res.chart.length - 1].hign);
}
let max3 = (((max - min) / 3) * 1 + min).toFixed(1);
chart = new F2.Chart({
el: canvas,
width,
height
});
chart.source(arr, {
date: {
range: [0, 1],
type: 'timeCat',
mask: 'MM/DD',
tickCount: 5,
},
weight: {
type: 'linear',
tickCount: 4,
ticks: [min, max3, (max - max3 + min).toFixed(1) * 1, max],
formatter: function formatter(ivalue) {
return ivalue + 'kg';
}
},
areaValue: {
type: 'linear',
tickCount: 4,
ticks: [min, max3, (max - max3 + min).toFixed(1) * 1, max],
formatter: function formatter(ivalue) {
return ivalue + 'kg';
}
},
});
chart.axis('areaValue', false);//這里的圖表是雙y軸,所以隱藏一個,把右邊的隱藏
chart.line({
connectNulls: true // 配置,連接空值數據
}).position('date*weight').shape('smooth').color('city', ['#EF597F']);
chart.point({
connectNulls: true // 配置,連接空值數據
}).position('date*weight').color('city', ['#EF597F']).style({
// stroke: '#EF597F',
// lineWidth: 1
});
chart.area({
connectNulls: true // 配置,連接空值數據
}).position('date*areaValue').shape('smooth').color('city', ['#2ECBB1', '#2ECBB1']);
chart.legend(false);
chart.tooltip(false);
chart.render();
// 注意:需要把chart return 出來
return chart;
})
})
},
})
你的數據格式是這個樣子的(如果返回格式不一致可自行處理)

這個City字段,你也可以寫標題,如果不寫,就是后面圖表配置顏色有個空字段,不然你的圖表沒有顏色,用其他非空的字段可能會報錯,配置可以看@antv的官網,這是兩個圖表結合的
wxml文件
<view class="container_canvas">
<ff-canvas id="column-dom" canvas-id="column" opts="{{ opts }}" />
</view>
