前端框架vue.js系列教程(5)-vue.js中实现echarts绘图

前端框架vue.js系列教程:

  • 安装配置node.js和npm

  • vue.js工程项目创建

  • vue.js框架应用开发

  • vue.js单页面应用开发

  • vue.js中实现echarts绘图

  • vue.js远程访问RESTful API接口示例

  • vue.js使用Fetch API访问RESTful API接口示例

ECharts是什么?

商业级数据图表,它是一个纯JavaScript的图标库,兼容绝大部分的浏览器,底层依赖轻量级的canvas类库ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。

Echarts支持的图表有折线图(区域图)、柱状图(条状图)、散点图(气泡图)、K线图、饼图(环形图)、雷达图(填充雷达图)、和弦图、力导向布局图、地图、仪表盘、漏斗图、事件河流图等12类图表。

很容易在vue.js中使用ECharts绘制各种可视化图表。

在vue.js中使用ECharts绘图

安装echarts包

首先需要在项目中安装echarts依赖包。这可以使用npm来安装:

$ npm install echarts

然后在你vue项目的js文件中使用import导入它:

import * as echarts from 'echarts';

接下来我们在上一节所创建的hellovue-app项目基础上,实现几个常见ECharts图表的绘制。

绘制柱状图

请按以下步骤实现一个ECharts柱状图的绘制。

(1) 在项目的src/views/文件夹下,新创建一个名为Bar.vue的文件,并编辑代码如下:

<template>
<h2>柱状图</h2>
<div class="right">
    <p><pre>{{ items }}</pre></p>
</div>

<div class="left">
  <!-- echarts图表绘制在这里 -->
  <div id="canvas" style="width: 600px;height:400px;"></div>    
</div>
</template>

<script>
  import * as echarts from 'echarts'    

  export default {
    name: 'BarGraph',
    data () {
      return {
        items: ''
      }
    },
    mounted () {
        // 根据准备好的dom初始化echarts实例
        var myChart = echarts.init(document.getElementById('canvas'));

        // 使用刚才指定的配置项和数据显示图表
        myChart.setOption({
          title: {
            text: '2016年11月平均销售额最高的5个品牌 (万元)(品牌, 平均销售额(万元)'
          },
          tooltip: {},
          legend: {
            data: ['平均销售额(万元)'],   // 要和series.name一致
            x:'right',
            y:'80px'              
          },
          xAxis: {
            type: 'category',
            data: ['SKII', 'DIOR', '美宝莲', '倩碧', '丝芙兰', '兰蔻']
          },
          yAxis: {
            type: 'value'
          },
          series: [
            {
              name: '平均销售额(万元)',
              type: 'bar',
              data: [5, 20, 36, 10, 10, 20]
            }
          ]
        });
    }
  }
</script>

<!-- 添加"scoped"属性来限制CSS仅作用于这个组件 -->
<style scoped>
.left{
width:50%;
}
.right{
float:right;
padding-right: 30px;
}
</style>

(2) 打开App.vue文件,设置一个对柱状图绘制的导航链接和渲染组件,代码如下:

<template>  
<div class="navigate">
  <ul>
      <!--使用 router-link 组件进行导航 -->
      <li><router-link to="/">首页</router-link></li>
<li><router-link to="/bar">柱状图</router-link></li>
  </ul>
</div>
<div class="pages">
    <!-- 渲染在这里 -->
    <router-view></router-view>
</div>
</template>

<script>
export default {
  name: 'App',
}
</script>

<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
.navigate{
width:200px;
float:left;
background-color: aliceblue;
}
.pages{
margin-left: 210px;
}
</style>

(3) 在main.js主文件中,导入路由组件(Bar.vue)并配置路由映射,实现代码如下:

import { createApp } from 'vue'
import App from './App.vue'

// 导入 vue router
import { createRouter, createWebHashHistory } from 'vue-router'

// 1. 定义路由组件.  
import BarPage from "./views/Bar.vue"

// 2. 定义一些路由映射
const routes = [
  { path: '/', component: BarPage },
  { path: '/bar', component: BarPage },
]

// 3. 创建路由实例并传递 `routes` 配置
const router = createRouter({
  // 4. 内部提供了 history 模式的实现。为了简单起见,我们在这里使用 hash 模式。
  history: createWebHashHistory(),
  routes: routes, // `routes: routes` 的缩写
})

// 5. 创建并挂载根实例
// createApp(App).mount('#app')    
const app = createApp(App)

// 确保 _use_ 路由实例使整个应用支持路由。
app.use(router)

// 把App挂载到#app节点上
app.mount('#app')

(4) 测试结果。首先启动服务器:

$ npm run serve

然后打开浏览器,访问http://localhost:8080/,点击柱状图链接,可以看到如下的绘图界面:

img

绘制饼状图

同样地,在src/views/文件夹下,创建一个Pie.vue文件,编辑内容如下:

<template>
<h2>饼状图</h2>
<div class="right">
    <p><pre>{{ items }}</pre></p>
</div>

<div class="left">
  <!-- echarts图表绘制在这里 -->
  <div id="canvas" style="width: 600px;height:400px;"></div>    
</div>
</template>

<script>
  import * as echarts from 'echarts'    

  export default {
    name: 'PieGraph',
    data () {
      return {
        items: ''
      }
    },
    mounted () {
        // 根据准备好的dom初始化echarts实例
        var myChart = echarts.init(document.getElementById('canvas'));

        // 使用刚才指定的配置项和数据显示图表
        myChart.setOption({
          title: {
            text: '销售额最高的5个品类,返回(品类,销售额)',
            subtext: '2016年11月',
            left: 'center'
          },
          tooltip: {
            trigger: 'item'
          },
          legend: {
            orient: 'vertical',
            data: ['销售额'],   // 要和series.name一致
            x:'left',
            y:'center'
          },
          series: [{
              name: '销售额',
              type: 'pie',
              radius: '50%',
              data: [
                { value: 1048, name: '服装' },
                { value: 735, name: '玩具' },
                { value: 580, name: '家用电器' },
                { value: 484, name: '图书' },
                { value: 300, name: '化妆品' }
              ],        
              emphasis: {
                itemStyle: {
                  shadowBlur: 10,
                  shadowOffsetX: 0,
                  shadowColor: 'rgba(0, 0, 0, 0.5)'
                }
              }
            }
          ]          
        });
    }
  }
</script>

<!-- 添加"scoped"属性来限制CSS仅作用于这个组件 -->
<style scoped>
.left{
width:50%;
}
.right{
float:right;
padding-right: 30px;
}
</style>

修改App.vue,增加导航链接如下:

<li><router-link to="/pie">饼状图</router-link></li> 

修改main.js,导入Pie.vue并增加路由映射,如下:

......
// 1. 定义路由组件.  
import BarPage from "./views/Bar.vue"
import PiePage from "./views/Pie.vue"

// 2. 定义一些路由映射
const routes = [
  { path: '/', component: BarPage },
  { path: '/bar', component: BarPage },
  { path: '/pie', component: PiePage },
]
......

测试结果。首先启动服务器,然后打开浏览器,访问 http://localhost:8080/,点击饼状图链接,可以看到如下的绘图界面:

img

 

绘制折线图

同样地,在src/views/文件夹下,创建一个Line.vue文件,编辑内容如下:

<template>
<h2>折线图</h2>
<div class="right">
    <p><pre>{{ items }}</pre></p>
</div>

<div class="left">
  <!-- echarts图表绘制在这里 -->
  <div id="canvas" style="width: 600px;height:400px;"></div>    
</div>
</template>

<script>
  import * as echarts from 'echarts'    

  export default {
    name: 'LineGraph',
    data () {
      return {
        items: ''
      }
    },
    mounted () {
        // 根据准备好的dom初始化echarts实例
        var myChart = echarts.init(document.getElementById('canvas'));

        // 使用刚才指定的配置项和数据显示图表
        myChart.setOption({
            title: {
              text: '2016年11月总销售额的变化情况,返回(日期, 销售额(千万元))'
            },
            tooltip: { },
            legend: {
              data: ['销售额(千万元)'],   // 要和series.name一致
              x:'right',
              y:'30px'              
            },
            xAxis: {
              type: 'category',
              data: ['周一','周二','周三','周四','周五','周六','周日']  
            },
            yAxis: {
              type: 'value'
            },
            series: [
              {
                name: '销售额(千万元)',
                data: [820, 532, 901, 334, 1290, 730, 1320],    
                type: 'line',
                smooth: true
              }
            ]
          });
    }
  }
</script>

<!-- 添加"scoped"属性来限制CSS仅作用于这个组件 -->
<style scoped>
.left{
width:50%;
}
.right{
float:right;
padding-right: 30px;
}
</style>

修改App.vue,增加导航链接如下:

<li><router-link to="/line">折线图</router-link></li> 

修改main.js,导入Pie.vue并增加路由映射,如下:

......
// 1. 定义路由组件.  
import BarPage from "./views/Bar.vue"
import PiePage from "./views/Pie.vue"
import LinePage from "./views/Line.vue"

// 2. 定义一些路由映射
const routes = [
  { path: '/', component: BarPage },
  { path: '/bar', component: BarPage },
  { path: '/pie', component: PiePage },
  { path: '/line', component: LinePage },
]
......

测试结果。首先启动服务器,然后打开浏览器,访问 http://localhost:8080/,点击折线图链接,可以看到如下的绘图界面:

img

绘制折混图

同样地,在src/views/文件夹下,创建一个Line.vue文件,编辑内容如下:

<template>
<h2>折混图</h2>
<div class="right">
    <p><pre>{{ items }}</pre>   </p>
</div>

<div class="left">
  <!-- echarts图表绘制在这里 -->
  <div id="canvas" style="width: 600px;height:400px;"></div>    
</div>
</template>

<script>
  import * as echarts from 'echarts'    

  // 指定图表的配置项和数据
  var option = {
          title: {
            text: '每天的总销售量和总评论数'
          },
          tooltip: {
            trigger:'axis',
            formatter: '{b0}({a0}): {c0}<br />{b1}({a1}): {c1}%'
          },
          legend: {
              data:['销量','占比'],
              x:'right'
          },
          xAxis: {
              data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
          },
          yAxis: [
            {
              type: 'value',
              name: '销量',
              show:true,
              interval: 10,
              axisLine: {
                  lineStyle: {
                      color: '#5e859e',
                      width: 2
                  }
              }
            },
            {
              type: 'value',
              name: '占比',
              min: 0,
              max: 100,
              interval: 10,
              axisLabel: {
                  formatter: '{value} %'
              },
              axisLine: {
                  lineStyle: {
                      color: '#5e859e',//纵坐标轴和字体颜色
                      width: 2
                  }
              }
          }],
          series: [{
              name: '销量',
              type: 'bar',
              barWidth : '50%',
              data: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]
          },{
              name: '占比',
              type: 'line',
              smooth:true,
              data: [20.0, 22.0, 33.0, 45.5, 48.3, 78.2, 90.3, 103.4, 43.0, 26.5, 22.0, 16.2]
          }]
      };

    export default {
        name: 'MixGraph',
        data () {
          return {
            items: ''
          }
        },
        mounted () {
            // 根据准备好的dom初始化echarts实例
            var myChart = echarts.init(document.getElementById('canvas'));
            // 使用指定的配置项和数据显示图表。
            myChart.setOption(option);
        }
      }
</script>

<!-- 添加"scoped"属性来限制CSS仅作用于这个组件 -->
<style scoped>
.left{
width:50%;
}
.right{
float:right;
padding-right: 30px;
}
</style>

修改App.vue,增加导航链接如下:

<li><router-link to="/mix">折混图</router-link></li> 

修改main.js,导入Mix.vue并增加路由映射,如下:

......
// 1. 定义路由组件.  
import BarPage from "./views/Bar.vue"
import PiePage from "./views/Pie.vue"
import LinePage from "./views/Line.vue"
import MixPage from "./views/Mix.vue"

// 2. 定义一些路由映射
const routes = [
  { path: '/', component: BarPage },
  { path: '/bar', component: BarPage },
  { path: '/pie', component: PiePage },
  { path: '/line', component: LinePage },
  { path: '/mix', component: MixPage },
]
......

测试结果。首先启动服务器,然后打开浏览器,访问http://http://localhost:8080/,点击折混图链接,可以看到如下的绘图界面:

img

 

© 版权声明
THE END
喜欢就支持一下吧
点赞293赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

夸夸
夸夸
还有吗!没看够!
取消
昵称表情代码图片

    暂无评论内容