处理echarts图表双Y轴刻度线不对称的问题

这里写自定义目录标题


1筛选出数组中的最大值

                function calMax(arr) {
	            var max = arr[0];
	            for (var i = 1; i < arr.length; i++) { // 求出一组数组中的最大值
	            if (max < arr[i]) {
	              max = arr[i];
	           }
	         }
	            var maxint = Math.ceil(max); //向上取整
	            var maxval = maxint + 1; // 最终设置的最大值+1是为了当所有返回数据为0时保证y轴有最大值1
	            return maxval; // 输出最大值
                }

因为我的echarts图表是循环得来的,只有其中一个有双Y轴,所以做了Y轴判断,echarts是在vue中使用的,鉴于VUE使用还不是很熟练,暂时是在option上做的判断
这是echarts图表的图片
在这里插入图片描述
后台返回图表格式
在这里插入图片描述
获取返回最大值

               //分别取各个电流电压温度的最大值,因为是循环所以需要判断
                var BCurr = that.data.label == '电流'? calMax(that.data.dataB.map(item => {return item.bphaseCurr})):""
                var ACurr = that.data.label == '电流'? calMax(that.data.dataA.map(item => {return item.aphaseCurr})):""
                var CCurr = that.data.label == '电流'? calMax(that.data.dataC.map(item => {return item.cphaseCurr})):""
                var BVolt = that.data.label == '电压'?calMax(that.data.dataB.map(item => {return item.bphaseVolt})):""
                var AVolt = that.data.label == '电压'?calMax(that.data.dataA.map(item => {return item.aphaseVolt})):""
                var CVolt = that.data.label == '电压'?calMax(that.data.dataC.map(item => {return item.cphaseVolt})):""
                var ATemp = that.data.label == '温度'?calMax(that.data.dataA.map(item => {return item.aphaseTemp})):""
                var BTemp = that.data.label == '温度'?calMax(that.data.dataB.map(item => {return item.bphaseTemp})):""
                var CTemp = that.data.label == '温度'?calMax(that.data.dataC.map(item => {return item.cphaseTemp})):""
                var boxTemp = that.data.label == '温度'?calMax(that.data.dataD.map(item => {return item.boxTemp})):""
                //将各个电流电压温度的最大值封装成一个数组
                var newVoltMaxl = [];
                newVoltMaxl.push(BVolt,AVolt,CVolt)
                var newCurrMaxl = [];
                newCurrMaxl.push(BCurr,ACurr,CCurr)
                var newTempMaxl = [];
                newTempMaxl.push(ATemp,BTemp,CTemp,boxTemp)
                //取新数组的最大值
                var CurrMax = calMax(newCurrMaxl)
                var VoltMax = calMax(newVoltMaxl) 
                var Temp = calMax(newTempMaxl)

完整代码:

<script>
    var echarts = require('echarts');
    var moment = require('moment');
    export default {
        name: "lineChart",
        props: ['data'],
        data(){
            return {

            }
        },

        mounted(){
            this.getEchart()
        },
        methods: {
            getEchart(){
                var myChart = echarts.init(this.$refs.chart);
                var that = this;
                function calMax(arr) {
	            var max = arr[0];
	            for (var i = 1; i < arr.length; i++) { // 求出一组数组中的最大值
	            if (max < arr[i]) {
	              max = arr[i];
	           }
	         }
	            var maxint = Math.ceil(max); //向上取整
	            var maxval = maxint + 1; // 最终设置的最大值+1是为了当所有返回数据为0时保证y轴有最大值1
	            return maxval; // 输出最大值
                }
                //分别取各个电流电压温度的最大值,因为是循环所以需要判断
                var BCurr = that.data.label == '电流'? calMax(that.data.dataB.map(item => {return item.bphaseCurr})):""
                var ACurr = that.data.label == '电流'? calMax(that.data.dataA.map(item => {return item.aphaseCurr})):""
                var CCurr = that.data.label == '电流'? calMax(that.data.dataC.map(item => {return item.cphaseCurr})):""
                var BVolt = that.data.label == '电压'?calMax(that.data.dataB.map(item => {return item.bphaseVolt})):""
                var AVolt = that.data.label == '电压'?calMax(that.data.dataA.map(item => {return item.aphaseVolt})):""
                var CVolt = that.data.label == '电压'?calMax(that.data.dataC.map(item => {return item.cphaseVolt})):""
                var ATemp = that.data.label == '温度'?calMax(that.data.dataA.map(item => {return item.aphaseTemp})):""
                var BTemp = that.data.label == '温度'?calMax(that.data.dataB.map(item => {return item.bphaseTemp})):""
                var CTemp = that.data.label == '温度'?calMax(that.data.dataC.map(item => {return item.cphaseTemp})):""
                var boxTemp = that.data.label == '温度'?calMax(that.data.dataD.map(item => {return item.boxTemp})):""
                //将各个电流电压温度的最大值封装成一个数组
                var newVoltMaxl = [];
                newVoltMaxl.push(BVolt,AVolt,CVolt)
                var newCurrMaxl = [];
                newCurrMaxl.push(BCurr,ACurr,CCurr)
                var newTempMaxl = [];
                newTempMaxl.push(ATemp,BTemp,CTemp,boxTemp)
                //取新数组的最大值
                var CurrMax = calMax(newCurrMaxl)
                var VoltMax = calMax(newVoltMaxl) 
                var Temp = calMax(newTempMaxl)
                let option = {
                    title: {
                       text: that.data.label + '趋势变化图',
                       subtext:that.data.label == '电流'?'额定'+ that.data.label+':' + that.data.aphaseCurrThr.aphaseCurrThr+'A '+' 剩余电流阀值:'+that.data.aftercurrentThr.aftercurrentThr+'mA' : (that.data.label == '电压'? '额定'+that.data.label + ':220A' : that.data.label+  '阀值:'+that.data.aphaseTempThr.aphaseTempThr+'℃'+'  箱体温度阈值:'+that.data.boxTempThr.boxTempThr+'℃')
                    },
                    tooltip: {
                        trigger: 'axis'
                    },
                    legend: {
                    },
                    toolbox: {
                        feature: {
                        saveAsImage: {}
                    }
                    },
                    grid: {
                        left: '3%',
                        right: '4%',
                        bottom: '15%',
                        containLabel: true
                    },
                    dataZoom: [{
                        type: 'inside'
                    }, {
                        type: 'slider',
                        bottom: 10,
                    }],
                    xAxis: {
                        type: 'category',
                        boundaryGap: false,
                        data:  that.data.dataA.map(item => {
                           return item.createTime
                       })


                    },
                    yAxis: [{
                        type: 'value',
                        axisLabel:{
                        formatter:that.data.label == '电流'?'{value}A' : "{value}"
                    },
                    min: 0,
                    max:that.data.label == '电流'?  CurrMax: that.data.label == '电压'? VoltMax: Temp,        // 计算最大值
                    interval:that.data.label == '电流'?  (CurrMax-0)/5 : that.data.label == '电压'? (VoltMax-0)/5:( Temp-0)/5 //  平均分为5份
                    },
                    {
                     type: 'value',
                     name:that.data.data ? "剩余电流":"",
                     axisLine: {
                     show: false,
                     }, 
                     axisTick:{ 
                     show:false
                    },  
                    axisLabel:{
                        formatter:'{value}mA'
                    },
                    min: 0,
                    max: that.data.data ? calMax(that.data.data.map(item => {return item.aftercurrent})) : "",        // 计算最大值
                    interval:that.data.data ?  (calMax(that.data.data.map(item => {return item.aftercurrent}))-0)/5 : ""  //  平均分为5份
                    }
                    ],
                    series: [
                        {
                            name: 'A相'+that.data.label, 
                            yAxisIndex:0,
                            type: 'line',
                            symbol:'diamond',
                            symbolSize: 7,
                            itemStyle: {
                            normal:{
                            color: '#F7A35C',  
                            lineStyle:{
                            color: '#F7A35C',
                            }
                            }},
                            data: that.data.label == '温度'? that.data.dataA.map(item => {return item.aphaseTemp}) : (that.data.label == '电压'? that.data.dataA.map(item => {return item.aphaseVolt}) : that.data.dataA.map(item => {return item.aphaseCurr}) )
                        },
                        {
                            name: 'B相'+that.data.label,
                            type: 'line', 
                            symbol:'triangle',
                            symbolSize: 7,
                            itemStyle: {
                            normal:{
                             color: 'green',
                             lineStyle:{
                            color: 'green',
                             }   
                            }
                            },
                            yAxisIndex:0,
                           data: that.data.label == '温度'? that.data.dataB.map(item => {return item.bphaseTemp}) :(that.data.label == '电压'? that.data.dataB.map(item => {return item.bphaseVolt}) : that.data.dataB.map(item => {return item.bphaseCurr}) )
                        },
                        {
                            name: 'C相'+that.data.label,
                            type: 'line',
                            symbol:'circle',
                            symbolSize: 6,
                            itemStyle: {
                             normal:{
                             color: 'red', 
                             lineStyle:{
                                 color: 'red',
                             }  
                            }
                            },
                            yAxisIndex:0,
                            data:that.data.label == '温度'? that.data.dataC.map(item => {return item.cphaseTemp}) : (that.data.label == '电压'? that.data.dataC.map(item => {return item.cphaseVolt}) : that.data.dataC.map(item => {return item.cphaseCurr}) )
                        },
                          {
                            // name: '箱体'+that.data.label,
                            name: that.data.dataD ? '箱体' + that.data.label : that.data.data ? '剩余' + that.data.label :'' ,
                            type: 'line',
                            symbol:'rectangle',
                            symbolSize: 6,
                            itemStyle: {
                            normal:{
                             color: 'blue', 
                             lineStyle:{
                            color: 'blue',
                             }
                            }
                            },
                            yAxisIndex:that.data.data ? 1:0,
                            data: that.data.label == '温度'? that.data.dataD.map(item => {return item.boxTemp}) : (that.data.label == '电流'? that.data.data.map(item => {return item.aftercurrent}) : '')
                        },
                    ]
                };
                myChart.setOption(option);
            }
        }
    }
</script>

html代码:

<template>
    <div class="chart_inline_wrapper" ref="chart"></div>
</template>

父组件完整代码

<template>
  <div class="history_chart_panel">
    <base-empty-data v-if="realTimesList.current.length == 0"></base-empty-data>
    <div class="chart_item" v-for="(item, index) in realTimesList.current" :key="index" v-if="realTimesList.current.length > 0">
      <div class="label_conside">
         <span class="label">{{item.label}}</span>
      </div>
      <div class="chart_wrap">
         <linechart label_name="有功功率"   :data="item"></linechart >
      </div>
    </div>
  </div>
</template>
<script>
import linechart from './LineChart.vue'
export default {
  components: {
    linechart 
  },
  data(){
    return {

    }
  },

  computed: {
            realTimesList(){
            let store = this.$store.state.historyStore;
            if( store.historyLoading ) return;

            let { historyDetail } = store;
            return historyDetail

        },


  },
   methods :{
        fetchPage(page){
            let param = this.$store.state.historyStore.historyParam;;
            param.page = page;
            this.$store.commit('historyParam', param)
            this.$store.dispatch('historyFromService', param)
        },

    }
}
</script>

<style lang="scss">
.history_chart_panel{
  // margin-top: 16px;
  background: white;
  padding: 30px 0;
  .chart_item{
      width: 94%;
      height: 380px;
      display: flex;
      margin: 0 3% 30px 3%;
      box-shadow: 0 0 5px rgba(0,0,0,0.3);
      border-radius: 8px;
      padding: 10px;
      box-sizing: border-box;
    .label_conside{
      width: 5%;
      max-width: 80px;
      float: left;
      text-align: center;
      height: 100%;
      display: flex;
      align-items: center;
      justify-content: center;
      .label{
        width: 22px;
        background: #ffb607;
        color: white;
        border-radius: 20px;
        text-align: center;
        padding: 20px 0
      }
    }
    .chart_wrap{
      float: left;
      height: 100%;
      flex: 1;
      margin-right: 20px;
    }
  }
}
#main{
    box-shadow: 0 0 5px rgba(0,0,0,0.3);
    height: 380px;
    margin-bottom: 20px;
    background: #ffffff;
    border-radius: 8px;
}
</style>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值