文章管理平台的首页主要是实现数据可视化,包含折线图、饼图、柱形图。选择echarts进行数据可视化的实现。
首页展示:
ECharts是百度公司开源的一个使用 JavaScript 实现的开源可视化库,兼容性强,底层依赖矢量图形 库 ZRender ,提供直观,交互丰富,可高度个性化定制的数据可视化图表。
ECharts 的入门使用特别简单, 5分钟就能够上手. 他大体分为这几个步骤
步骤1:引入 echarts.js 文件 echarts是一个 js 的库,当然得先引入这个库文件
<script src="js/echarts.min.js"></script>
步骤2:准备一个呈现图表的盒子 这个盒子通常来说就是我们熟悉的 div ,这个 div 决定了图表显示在哪里
<div id="root" style="width: 600px;height:600px;"></div>
步骤3:初始化 echarts 实例对象 在这个步骤中, 需要指明图表最终显示在哪里的DOM元素
var myChart = echarts.init(document.getElementById('root'))
步骤4:准备配置项 这步很关键,我们最终的效果,到底是显示饼图还是折线图,基本上都是由配置项决定的
var option = {
xAxis: {
type: 'category',
data: ['小明', '小红', '小王']
},
yAxis: {
type: 'value'
},
series: [
{
name: '语文',
type: 'bar',
data: [70, 92, 87],
}
]
}
步骤5:将配置项设置给 echarts 实例对象
myChart.setOption(option)
一个图表最终呈现什么样子,完全取决于这个配置项.所以对于不同的图表, 除了配置项会发生改变之外, 其他的代码 都是固定不变的.
月新增文章面积图的实现步骤:1、选择图表类型 2、准备数据 3、更改配置项 4、将配置项设置给echarts实例对象
//选取图表类型
<el-col :sm="16" :xs="16">
<div class="gragh_pannel" id="curve_show"></div>
</el-col>
// 数据源(模拟后台返回的数据)
const aListAll = [
{ count: 36, date: '2019-04-13' },
{ count: 52, date: '2019-04-14' },
{ count: 78, date: '2019-04-15' },
{ count: 85, date: '2019-04-16' },
{ count: 65, date: '2019-04-17' },
{ count: 72, date: '2019-04-18' },
{ count: 88, date: '2019-04-19' },
{ count: 64, date: '2019-04-20' },
{ count: 72, date: '2019-04-21' },
{ count: 90, date: '2019-04-22' },
{ count: 96, date: '2019-04-23' },
{ count: 100, date: '2019-04-24' },
{ count: 102, date: '2019-04-25' },
{ count: 110, date: '2019-04-26' },
{ count: 123, date: '2019-04-27' },
{ count: 100, date: '2019-04-28' },
{ count: 132, date: '2019-04-29' },
{ count: 146, date: '2019-04-30' },
{ count: 200, date: '2019-05-01' },
{ count: 180, date: '2019-05-02' },
{ count: 163, date: '2019-05-03' },
{ count: 110, date: '2019-05-04' },
{ count: 80, date: '2019-05-05' },
{ count: 82, date: '2019-05-06' },
{ count: 70, date: '2019-05-07' },
{ count: 65, date: '2019-05-08' },
{ count: 54, date: '2019-05-09' },
{ count: 40, date: '2019-05-10' },
{ count: 45, date: '2019-05-11' },
{ count: 38, date: '2019-05-12' }
]
// 但是图标要求直接给数字的值, 所以要把对象的值取出来形成2个只有值的数组
const aCount = []
const aDate = []
for (let i = 0; i < aListAll.length; i++) {
aCount.push(aListAll[i].count)
aDate.push(aListAll[i].date)
}
// 面积图的echarts配置项
const chartopt = {
title: {
text: '月新增文章数', // 标题
left: 'center', // 位置居中
top: '10' // 标题距离容器顶部px
},
tooltip: { // 提示框组件
trigger: 'axis' // 坐标轴触发(鼠标放在坐标轴就能出提示框)
},
legend: { // 图例组件(每种颜色的意思)
data: ['新增文章'], // 图例文字解释(要和series里name对应)
top: '40' // 距离容器顶部px
},
toolbox: { // 工具栏
show: true, // 要显示
feature: { // 各工具配置项
mark: { show: true }, // 辅助线开关
dataView: { show: true, readOnly: false }, // 数据视图工具,可以展现当前图表所用的数据,编辑后可以动态更新。
magicType: { show: true, type: ['line', 'bar'] }, // 动态类型切换
restore: { show: true }, // 配置项还原
saveAsImage: { show: true } // 点击保存下载图片
}
},
xAxis: [ // 水平轴显示
{
name: '日',
type: 'category',
boundaryGap: false, // 坐标轴两边留白策略 (不留白)
data: aDate // 水平轴上的数字数据 (时间)
}
],
yAxis: [ // 垂直轴显示
{
name: '月新增文章数',
type: 'value' // 以series里的data值做划分段
}
],
series: [ // 系列(控制图表类型和数据)
{
name: '新增文章',
type: 'line', // 折线图
smooth: true, // 是否平滑视觉引导线,默认不平滑,可以设置成 true 平滑显示
areaStyle: { type: 'default' }, // 区域填充样式。设置后显示成区域面积图。
itemStyle: { color: '#f80', lineStyle: { color: '#f80' } }, // 折线拐点标志的样式。
data: aCount // 真正数据源(用下标和x轴数组对应)
}
],
grid: { // 直角坐标系内绘图网格
show: true,
x: 50, // grid 组件离容器偏移量, 左侧
x2: 50, // 右侧
y: 80, // 上
height: 220 // 高度
}
}
//将配置项设置给echarts实例对象
curveChart.setOption(chartopt)
呈现效果:
分类文章数量比饼图的实现步骤:1、选择图表类型 2、准备数据 3、更改配置项 4、将配置项设置给echarts实例对象
//选择图表类型 <el-col :sm="8" :xs="8"> <div class="gragh_pannel" id="pie_show"></div> </el-col>
//准备数据 series: [ { name: '访问来源', type: 'pie', radius: ['45%', '60%'], center: ['50%', '65%'], data: [ { value: 300, name: '奇趣事' }, { value: 100, name: '会生活' }, { value: 260, name: '爱旅行' }, { value: 180, name: '趣美味' } ] } ] }
//更改配置项 const oPieopt = { title: { top: 10, text: '分类文章数量比', x: 'center' }, tooltip: { trigger: 'item', // 在图形上才会触发提示 formatter: '{a} <br/>{b} : {c} ({d}%)' // 提示的文字显示的格式 // a: 系列名 // b: 数据名 // c: 数值 // d: 百分比 (只有饼状图生效) }, color: ['#5885e8', '#13cfd5', '#00ce68', '#ff9565'], // 系列颜色 legend: { // 图例组件 x: 'center', top: 65, data: ['奇趣事', '会生活', '爱旅行', '趣美味'] // 每个部分对应的数据名(要和series里name对应) }, toolbox: { // 工具箱 show: true, x: 'center', top: 35, feature: { mark: { show: true }, dataView: { show: true, readOnly: false }, magicType: { show: true, type: ['pie', 'funnel'], option: { funnel: { x: '25%', width: '50%', funnelAlign: 'left', max: 1548 } } }, restore: { show: true }, saveAsImage: { show: true } } },
//将配置项设置给echarts实例对象 oPie.setOption(oPieopt)
实现效果:
文章访问量柱状图的实现步骤:1、选择图表类型 2、准备数据 3、更改配置项 4、将配置项设置给echarts实例对象
//选择图表类型 <div class="container-fluid"> <div class="column_pannel" id="column_show"></div> </div> </div>
//准备数据 series: [ { name: '奇趣事', type: 'bar', barWidth: 20, areaStyle: { type: 'default' }, itemStyle: { color: '#fd956a' }, data: [800, 708, 920, 1090, 1200] }, { name: '会生活', type: 'bar', barWidth: 20, areaStyle: { type: 'default' }, itemStyle: { color: '#2bb6db' }, data: [400, 468, 520, 690, 800] }, { name: '爱旅行', type: 'bar', barWidth: 20, areaStyle: { type: 'default' }, itemStyle: { color: '#13cfd5' }, data: [500, 668, 520, 790, 900] }, { name: '趣美味', type: 'bar', barWidth: 20, areaStyle: { type: 'default' }, itemStyle: { color: '#00ce68' }, data: [600, 508, 720, 890, 1000] } ],
//更改配置项 const oColumnopt = { title: { text: '文章访问量', left: 'center', top: '10' }, tooltip: { trigger: 'axis' }, legend: { data: ['奇趣事', '会生活', '爱旅行', '趣美味'], top: '40' }, toolbox: { show: true, feature: { mark: { show: true }, dataView: { show: true, readOnly: false }, magicType: { show: true, type: ['line', 'bar'] }, restore: { show: true }, saveAsImage: { show: true } } }, xAxis: [ { type: 'category', data: ['1月', '2月', '3月', '4月', '5月'] } ], yAxis: [ { name: '访问量', type: 'value' } ], grid: { show: true, x: 50, x2: 30, y: 80, height: 260 }, dataZoom: [ // 给x轴设置滚动条 { start: 0, // 默认为0 end: 100 - 1000 / 31, // 默认为100 type: 'slider', show: true, xAxisIndex: [0], handleSize: 0, // 滑动条的 左右2个滑动条的大小 height: 8, // 组件高度 left: 45, // 左边的距离 right: 50, // 右边的距离 bottom: 26, // 右边的距离 handleColor: '#ddd', // h滑动图标的颜色 handleStyle: { borderColor: '#cacaca', borderWidth: '1', shadowBlur: 2, background: '#ddd', shadowColor: '#ddd' } } ]
//将配置项设置给echarts实例对象 oColumn.setOption(oColumnopt)
实现效果: