知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁(yè) » 新聞資訊 » 小程序相關(guān) >
小程序-引入 echart 圖表畫圓餅圖
發(fā)表時(shí)間:2021-1-5
發(fā)布人:葵宇科技
瀏覽次數(shù):147
在 web 中引入echart
可視化圖表是很常見(jiàn)的操作,那在小程序當(dāng)中又如何引入使用呢
在github
上下載echarts-for-weixin代碼,并將ec-canvas
文件夾,復(fù)制拷貝到根目錄路徑下,與pages
目錄同級(jí),或者放置到components
自定義組件文件夾中
在引用ec-canvas
時(shí),相對(duì)路徑引入正確即可
如下所示:pages/piecharts
配置 json
{
"usingComponents": {
"ec-canvas": "../../components/ec-canvas/ec-canvas"
}
}
復(fù)制代碼
wxml
<view>
<view class="pie-charts">
<ec-canvas
id="mychart-dom-bar"
canvas-id="mychart-bar"
ec="{{ ec }}"
></ec-canvas>
</view>
</view>
復(fù)制代碼
wxss
.pie-charts {
width: 100%;
height: 500rpx; // 一定要給ec-canvas最外層一個(gè)高度,否則canvas就不會(huì)顯示出來(lái)
margin: 20px 0 0 10px;
}
復(fù)制代碼
js
// pages/piecharts/piecharts.js
// 引入echarts,一定要引入ec-canvas中的echarts.js文件
import * as echarts from '../../components/ec-canvas/echarts';
// 圖表選項(xiàng)
let option = {
title: {
// 標(biāo)題
text: '圓餅圖示例',
x: 'center',
},
tooltip: {
// tip提示
trigger: 'item',
formatter: '{a} \n : {c} (jthnh5d%)',
},
series: [
{
name: '訪問(wèn)來(lái)源',
type: 'pie',
radius: ['50%', '70%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center',
},
legend: {
orient: 'vertical',
left: 'left',
data: ['前端', '后端', '小程序', '面試題解', '讀書(shū)'],
},
emphasis: {
label: {
show: true,
fontSize: '20',
fontWeight: 'bold',
},
},
labelLine: {
show: false,
},
data: [
// 展示的數(shù)據(jù),一般情況下,只要?jiǎng)討B(tài)替換到這里的數(shù)據(jù)即可,注意小程序中換行用\n而非br
{ value: 335, name: '前端 \n 23%' },
{ value: 310, name: '后端' },
{ value: 234, name: '小程序' },
{ value: 135, name: '面試題解' },
{ value: 1548, name: '讀書(shū)' },
],
itemStyle: {
// 陰影
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)',
},
},
},
],
};
let chart;
// 圖表初始化
function initChart(canvas, width, height, dpr) {
chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr, // 像素
});
canvas.setChart(chart);
chart.setOption(option);
return chart;
}
Page({
/**
* 頁(yè)面的初始數(shù)據(jù)
*/
data: {
ec: {
onInit: initChart,
},
},
/**
* 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載
*/
onLoad: function(options) {},
});
復(fù)制代碼
注意事項(xiàng)
-
在小程序中的引用圖表的頁(yè)面中的配置 json 文件中要引入
ec-canvas
組件,注意路徑的引用正確 -
在邏輯頁(yè)面中,使用
ec-charts
前需要手動(dòng)導(dǎo)入引入echarts
,即import * as echarts from '../../xxxx/ec-canvas/echarts';
-
在頁(yè)面的
wxss
中需要給ec-canvas
最外層一個(gè)高度,ec-canvas
默認(rèn)的高度是0
-
具體各個(gè)參數(shù)選項(xiàng)配置,可參考 echart 官方文檔的echarts 官方文檔
知道了怎么把數(shù)據(jù)渲染到頁(yè)面上,但是又如何修改默認(rèn)的初始化數(shù)據(jù)呢,其實(shí)只要按照原有的數(shù)據(jù)結(jié)構(gòu),把新的數(shù)據(jù)將原來(lái)的給覆蓋掉就可以了的
更新與恢復(fù)圖表數(shù)據(jù)
// 假設(shè)如下是要更新的數(shù)據(jù),一般是后臺(tái)返回的
// 后臺(tái)返回的數(shù)據(jù)字段可能跟圖表的字段可能不一致,但是結(jié)構(gòu)是必須要相同的
const pieObj = {
updatelegends: ['吃飯', '約會(huì)', '購(gòu)物', '旅游', '請(qǐng)客'],
updateExpendData: [
{ money: 1500, type: '吃飯' },
{ money: 2000, type: '約會(huì)' },
{ money: 300, type: '購(gòu)物' },
{ money: 400, type: '旅游' },
{ money: 600, type: '請(qǐng)客' },
],
resetlegend: ['前端', '后端', '小程序', '面試題解', '讀書(shū)'],
resetExpendData: [
{ value: 335, name: '前端' },
{ value: 310, name: '后端' },
{ value: 234, name: '小程序' },
{ value: 135, name: '面試題解' },
{ value: 1548, name: '讀書(shū)' },
],
};
module.exports = pieObj; // 導(dǎo)出數(shù)據(jù)
復(fù)制代碼
wxml 更新數(shù)據(jù)
<view class="change-box">
<view class="update-btn btn" bindtap="onUpdate">更新數(shù)據(jù)</view>
<view class="reset-btn btn" bindtap="onResetDate">恢復(fù)數(shù)據(jù)</view>
</view>
復(fù)制代碼
樣式代碼
/* pages/piecharts/piecharts.wxss */
.pie-charts {
width: 100%;
height: 500rpx; // 圖表的外層需要設(shè)置一個(gè)高度,否則echarts不會(huì)顯示,默認(rèn)高度是0
margin: 20px 0 0 10px;
}
.change-box {
display: flex;
justify-content: center;
}
.btn {
width: 80px;
height: 40px;
text-align: center;
line-height: 40px;
border-radius: 5px;
color: #fff;
}
.update-btn {
background: #f56c6c;
margin-right: 10px;
}
.reset-btn {
background: #409eff;
}
復(fù)制代碼
**邏輯代碼 **
// pages/piecharts/piecharts.js
// 引入echarts
import * as echarts from '../../components/ec-canvas/echarts';
const pieData = http://www.wxapp-union.com/require('./date'); // 引入數(shù)據(jù)
// 選項(xiàng)
let option = {
// 初始化數(shù)據(jù)
title: {
text: '圓餅圖示例',
x: 'center',
},
legend: {
orient: 'vertical',
left: 'left',
data: ['前端', '后端', '小程序', '面試題解', '讀書(shū)'],
},
tooltip: {
trigger: 'item',
formatter: '{a} \n : {c} (rlzr5zn%)',
},
series: [
{
name: '訪問(wèn)來(lái)源',
type: 'pie',
radius: ['50%', '70%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center',
},
legend: {
orient: 'vertical',
left: 'left',
data: ['前端', '后端', '小程序', '面試題解', '讀書(shū)'],
},
emphasis: {
label: {
show: true,
fontSize: '20',
fontWeight: 'bold',
},
},
labelLine: {
show: false,
},
data: [
{ value: 335, name: '前端 \n 23%' },
{ value: 310, name: '后端' },
{ value: 234, name: '小程序' },
{ value: 135, name: '面試題解' },
{ value: 1548, name: '讀書(shū)' },
],
itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)',
},
},
},
],
};
let chart;
function initChart(canvas, width, height, dpr) {
chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr, // 像素
});
canvas.setChart(chart);
chart.setOption(option);
return chart;
}
Page({
/**
* 頁(yè)面的初始數(shù)據(jù)
*/
data: {
ec: {
onInit: initChart,
},
},
/**
* 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載
*/
onLoad: function(options) {},
// 更新數(shù)據(jù)
onUpdate() {
console.log(pieData);
const expendData = http://www.wxapp-union.com/pieData.updateExpendData;
const legend = pieData.updatelegends;
const newExpends = expendData.map((item) => {
return {
name: item.type, // 因?yàn)閿?shù)據(jù)結(jié)構(gòu)字段不一樣,所以要進(jìn)行賦值,修改
value: item.money, // 如果后端返回的數(shù)據(jù)字段與圖表接口字段一樣,那可忽略
};
});
option.legend.data = http://www.wxapp-union.com/legend;
option.series[0].data = http://www.wxapp-union.com/newExpends;
if (chart) {
chart.setOption(option); // 得重新設(shè)置Option才會(huì)生效
}
},
// 恢復(fù)數(shù)據(jù)
onResetDate() {
const expendData = http://www.wxapp-union.com/pieData.resetExpendData;
const legend = pieData.resetlegend;
option.legend.data = http://www.wxapp-union.com/legend; // 因?yàn)榻涌谧侄闻c后臺(tái)返回字段相同,直接賦值即可
option.series[0].data = http://www.wxapp-union.com/expendData;
if (chart) {
chart.setOption(option); // 得重新設(shè)置Option才會(huì)生效
}
},
});
復(fù)制代碼
注意
唯一需要注意的是,不要更改圖表渲染的內(nèi)部數(shù)據(jù)結(jié)構(gòu),當(dāng)后臺(tái)返回的接口中的數(shù)據(jù)結(jié)構(gòu)字段與圖表不一致時(shí)
比如:上面的legend
與series
下的data
中的name
與value
字段,當(dāng)后端返回的子段不一樣時(shí),只需要在前臺(tái)重新處理一下即可
上面的更新數(shù)據(jù)中后臺(tái)返回字段時(shí)money
與type
,在更新數(shù)據(jù)時(shí),需要重新賦值
最后需要setOption
重新設(shè)置數(shù)據(jù),否則圖表數(shù)據(jù)是不會(huì)更新的,這個(gè)與vue-echarts
與單獨(dú)使用echarts
有點(diǎn)不一樣
實(shí)例效果
結(jié)語(yǔ)
主要介紹了在小程序中怎么引入圖表echarts
,是使用ec-canvas
這個(gè)組件,在使用ec-canvas
時(shí),需要注意:
引入ec-canvas
組件的路徑,同時(shí),還需要在使用的頁(yè)面當(dāng)中,引入組件的echart.js
文件
圖表的基本配置,可以參考echarts
的官方文檔,更新圖表的數(shù)據(jù)時(shí),需要注意:保持結(jié)構(gòu)一致性,不要修改圖表內(nèi)部數(shù)據(jù)結(jié)構(gòu)的字段
當(dāng)后端返回的數(shù)據(jù)字段與圖表字段不一致時(shí),在你拿到數(shù)據(jù)接口的數(shù)據(jù)后,重新賦值即可.最后不要忘記重新setOption
設(shè)置數(shù)據(jù)
相關(guān)案例查看更多
相關(guān)閱讀
- 云南網(wǎng)站建設(shè)招商
- 退款
- 昆明做網(wǎng)站建設(shè)的公司排名
- 云南網(wǎng)站建設(shè)一條龍
- 報(bào)廢車拆解管理系統(tǒng)
- 云南網(wǎng)站建設(shè)特性
- 買小程序被騙
- 小程序
- 昆明做網(wǎng)站
- 報(bào)廢車管理
- 網(wǎng)站建設(shè)開(kāi)發(fā)
- 搜索引擎優(yōu)化
- 軟件定制
- 云南網(wǎng)站優(yōu)化公司
- 云南網(wǎng)站建設(shè)列表網(wǎng)
- 汽車報(bào)廢回收軟件
- 昆明網(wǎng)站開(kāi)發(fā)
- 海報(bào)插件
- 云南省城鄉(xiāng)建設(shè)廳網(wǎng)站
- 云南網(wǎng)站建設(shè)公司排名
- 大理小程序開(kāi)發(fā)
- 云南網(wǎng)絡(luò)營(yíng)銷顧問(wèn)
- 汽車拆解管理系統(tǒng)
- 微信分銷系統(tǒng)
- 網(wǎng)絡(luò)公司
- 貴州小程序開(kāi)發(fā)
- 云南建站公司
- 花農(nóng)小程序
- 云南軟件設(shè)計(jì)
- vue開(kāi)發(fā)小程序