zoukankan      html  css  js  c++  java
  • vue中实现echart图表

    项目中涉及到柱状图   折线图  饼图   主要思路   页面级组件里引用三个图标子组件   在子组件中配置echart图标配置信息   在父组件中传入数据值

    注意问题  :  子组件id不能重复   

    父组件  主要代码

    引入组件<el-row>

          <el-col :span="24">
            <div class="item-box">
               <my-chart :chartData="chart0"></my-chart>
             </div>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="8">
            <div class="item-box">
                  <myCharta :chartData="chart1"></myCharta>
             </div>
          </el-col>
          <el-col :span="8">
            <div class="item-box">
                  <my-chartb :chartData="chart2"></my-chartb>
             </div>
          </el-col>
         <el-col :span="8">
            <div class="item-box">
                   <myChartc :chartData="chart3"></myChartc>
             </div>
          </el-col>
        </el-row>

    //导入组件

    import MyChart from './dashboard/myChart'
    import MyCharta from './dashboard/myCharta'
    import MyChartb from './dashboard/myChartb'
    import MyChartc from './dashboard/myChartc'

    //注册组件

    components: {
       BarChart,
       MyChart,
       MyCharta,
       MyChartb,
       MyChartc
    },

    data() {
      return {
          chart0:{
              preData: [ 100, 25, 83, 21, 52, 113, 50, 89, 61, 35, 53, 102],
              nextData: [45, 45,78, 100, 119, 80, 67, 25, 45, 109, 90, 52]
           },
           chart1:[
               {value:335, name:'工种1'},
               {value:310, name:'工种2'},
               {value:234, name:'工种3'},
               {value:135, name:'工种4'},
               {value:1548, name:'工种5'},
               {value:1, name:'工种6'},
               {value:2, name:'工种7'}
           ],
           chart2:{
               preData: [ 100, 25, 83, 21, 52],
               nextData: [ 80, 67, 25, 45, 109]
           },
           chart3:[
              {value:35, name:'企业在职人员'},
              {value:10, name:'学生'},
              {value:24, name:'农村劳动者'},
              {value:85, name:'城镇再就业人员'},
              {value:8, name:'其他'}
          ],

      }
    },

    <style lang="scss" scoped>
    .item-box {
    background: #fff;
    padding: 16px 16px 0;
    margin-bottom: 32px;
    // margin-right: 10px;
    box-sizing: border-box;


    }

    折线图配置代码

    <template>
      <div id="myChart" :style="{width, height: height}">
        <!-- mychart -->
      </div>
    </template>
    
    <script>
      import echarts from 'echarts'
      import resize from './mixins/resize'
      require('echarts/theme/macarons') // echarts theme
      export default {
        // mixins: [resize],
        props: {
          className: {
            type: String,
            default: 'chart'
          },
           {
            type: String,
            default: '100%'
          },
          height: {
            type: String,
            default: '350px'
          },
          autoResize: {
            type: Boolean,
            default: true
          },
          chartData: {
            type: Object,
            required: true
          }
        },
        data() {
          return {
            chart: null,
          }
        },
        created() {},
        mounted() {
          this.$nextTick(res => {
            this.initChart();
          })
        },
        methods: {
          initChart() {
            this.chart = echarts.init(document.getElementById('myChart'), 'macarons')
            this.setOptions(this.chartData)
    
          },
          setOptions(chartData) {
            console.log("chartData",chartData)
            this.chart.setOption({
              title: {
                text: '月度考试人员分析',
              },
              tooltip: {
                show:true,
                trigger: 'axis',
                axisPointer:{
                              type: 'line',
                              lineStyle: {
                                  color: '#48b',
                                   1,
                                  type: 'solid'
                              },
                              crossStyle: {
                                  color: '#1e90ff',
                                   1,
                                  type: 'dashed'
                              },
                              shadowStyle: {
                                  color: 'rgba(150,150,150,0.3)',
                                   'auto',
                                  type: 'default'
                              }
                          }
              },
              legend: {
                show:true,
                backgroundColor:'rgba(150,150,150,0)',
                data: ['2021年', '2022年']
              },
              toolbox: {
                itemSize:12,
                borderColor:"#ddd",
                show: true,
                feature: {
                  magicType: {
                    show: true,
                    type:['line', 'bar',]
                  },
                  restore: {
                    show: true
                  },
                }
              },
              calculable: true,
              grid: {
                left: 40,
                right: 16,
                bottom: 30,
                top: 70,
                backgroundColor: 'rgba(255,0,0,1)',
    
              },
    
              xAxis: [{
                type: 'category',
                boundaryGap: false,
                data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
                axisTick: false
              }],
              yAxis: [{
                axisTick: {
                  show: false
                }
              }],
              series: [{
                  name: '2021年',
                  type: 'line',
                  data: chartData.preData,
                  markPoint: {
                    // clickable:false,
                    itemStyle: {
                      fontSize: 12,
                    },
                    data: [{
                        type: 'max',
                        name: '最大值'
                      },
                      {
                        type: 'min',
                        name: '最小值'
                      }
                    ]
                  },
                },
                {
                  name: '2022年',
                  type: 'line',
                  data: chartData.nextData,
                  markPoint: {
                    data: [{
                        type: 'max',
                        name: '最大值'
                      },
                      {
                        type: 'min',
                        name: '最小值'
                      }
                    ]
                  },
                }
              ]
            })
          }
        }
      }
    </script>
    
    <style>
    </style>
    View Code

    饼图配置代码

    <template>
        <div>
              <div id="myCharta" :style="{width, height: height}"></div>
        </div>
    
    </template>
    
    <script>
      import echarts from 'echarts'
      import resize from './mixins/resize'
      require('echarts/theme/macarons') // echarts theme
      export default {
        // mixins: [resize],
        props: {
          className: {
            type: String,
            default: 'chart'
          },
           {
            type: String,
            default: '100%'
          },
          height: {
            type: String,
            default: '350px'
          },
          autoResize: {
            type: Boolean,
            default: true
          },
          chartData: {
            type: Object,
            required: true
          }
        },
        data() {
          return {
            chart: null,
          }
        },
        created() {},
        mounted() {
          this.$nextTick(res => {
            this.initChart();
          })
        },
        methods: {
          initChart() {
            this.chart = echarts.init(document.getElementById('myCharta'), 'macarons')
            this.setOptions(this.chartData)
    
          },
          setOptions(chartData) {
            console.log("chartData",chartData)
            this.chart.setOption({
              title: {
                text: '职业工种人员占比',
              },
               tooltip : {
                   trigger: 'item',
                   formatter: "{a} <br/>{b} : {c} ({d}%)"
               },
              legend: {
                show:true,
                orient : 'vertical',
                x : 'right',
                itemHeight:10,
                itemWidth:10,
                textStyle:{
                  color:'#999',
                  fontSize:14
                }
                // backgroundColor:'rgba(150,150,150,0)',
                // data: ['工种一', '工种二','工种三','工种四']
              },
    
              calculable: true,
              grid: {
                left: 40,
                right: 16,
                bottom: 30,
                top: 70,
                backgroundColor: 'rgba(255,0,0,1)',
    
              },
              series: [
                        {
                            name:'职业工种人员占比',
                            type:'pie',
                            // radius : '55%',
                            radius :    ['0', '60%'],
                            center: ['50%', '55%'],
                            startAngle:90,
                            minAngle:2,
                            selectedOffset:100,
                            data:chartData
                        }
              ]
            })
          }
        }
      }
    </script>
    
    <style>
    </style>
    View Code

    柱状图配置代码

    <template>
      <div id="myChartb" :style="{width, height: height}">
        <!-- mychart -->
      </div>
    </template>
    
    <script>
      import echarts from 'echarts'
      import resize from './mixins/resize'
      require('echarts/theme/macarons') // echarts theme
      export default {
        // mixins: [resize],
        props: {
          className: {
            type: String,
            default: 'chart'
          },
           {
            type: String,
            default: '100%'
          },
          height: {
            type: String,
            default: '350px'
          },
          autoResize: {
            type: Boolean,
            default: true
          },
          chartData: {
            type: Object,
            required: true
          }
        },
        data() {
          return {
            chart: null,
          }
        },
        created() {},
        mounted() {
          this.$nextTick(res => {
            this.initChart();
          })
        },
        methods: {
          initChart() {
            this.chart = echarts.init(document.getElementById('myChartb'), 'macarons')
            this.setOptions(this.chartData)
    
          },
          setOptions(chartData) {
            console.log("chartData",chartData)
            this.chart.setOption({
              title: {
                text: '职业等级人员占比',
              },
               tooltip : {
                   trigger: 'axis'
               },
              legend: {
                show:true,
                backgroundColor:'rgba(150,150,150,0)',
                data: ['2021年', '2022年']
              },
              calculable: true,
              grid: {
                left: 40,
                right: 16,
                bottom: 30,
                top: 70,
                backgroundColor: 'rgba(255,0,0,1)',
              },
    
              xAxis: [{
                type: 'value',
                boundaryGap: false,
                axisTick: true
              }],
              yAxis: [{
                type : 'category',
                data: ['1', '2', '3', '4', '5'],
                axisTick: {
                  show: true
                }
              }],
              series: [{
                  name: '2021年',
                  type:'bar',
                  data: chartData.preData,
                  markPoint: {
                    // clickable:false,
                    itemStyle: {
                      fontSize: 12,
                    },
                    data: [{
                        type: 'max',
                        name: '最大值'
                      },
                      {
                        type: 'min',
                        name: '最小值'
                      }
                    ]
                  },
                  //图形样式,可设置图表内图形的默认样式和强调样式(悬浮时样式):
                  itemStyle: {
                      normal: {
                          color:function(params) {
                                   return '#5a5e9e'
                          }
                      },
                      emphasis: {
    
                      }
                  }
                },
                {
                  name: '2022年',
                  type: 'bar',
                  data: chartData.nextData,
                  markPoint: {
                    data: [{
                        type: 'max',
                        name: '最大值'
                      },
                      {
                        type: 'min',
                        name: '最小值'
                      }
                    ]
                  },
                  //图形样式,可设置图表内图形的默认样式和强调样式(悬浮时样式):
                  itemStyle: {
                      normal: {
                          color:function(params) {
                                   return '#ec89a5'
                          }
                      },
                      emphasis: {
    
                      }
                  }
                }
              ]
            })
          }
        }
      }
    </script>
    
    <style>
    </style>
    View Code
  • 相关阅读:
    Python菜鸟之路:Django 序列化数据
    Python菜鸟之路:Django 数据验证之钩子和Form表单验证
    Python菜鸟之路:Django 路由补充1:FBV和CBV
    Python菜鸟之路:Django 文件上传的几种方式
    Python菜鸟之路:Django 分页
    Python菜鸟之路:Django 信号
    Python菜鸟之路:Django 缓存
    《将博客搬至CSDN》
    Java基础语法
    Java基础语法
  • 原文地址:https://www.cnblogs.com/ddqyc/p/15683090.html
Copyright © 2011-2022 走看看