vue中使用echarts(2)(折线图柱状图混用,双y轴问题)

echarts导入问题
如果要查看echarts的详细引入步骤,请查看文档《vue中使用echarts(1)》。此处只分享echarts初始化遇到的一些问题和配置项的使用以及双y轴0刻度对不齐的问题。
在一个页面的两个不同组件都用到echarts时会出现一个问题,第一个echarts可以正常显示,切换到另一个组件时,其中的echarts图表的宽高会变成100*100.解决办法是切换组件时初始化该组件中的echarts图表。(在使用高德地图时也会出现这种问题,解决办法一样,再次初始化地图即可。)
切换组件时调用:
drawCharts() { var myChart = this.$echarts.init(document.getElementById("tfcharts")); myChart.setOption(this.option); }
option属性配置:
1.基本配置项:
xAxis//x轴
yAxis//y轴
series//数据层
三个配置都是对象
如:xAxis:{}
在绘制几组不同类型的数据时这三个配置项也可以时数组:
xAxis:[{},{}…]表示两个或多个x轴。yAxis同理。
series:[{},{}]绘制两组数据。
比如同时绘制降水和温度两种数据
其他常用配置项
tooltip:{}//鼠标移上时显示当前条目提示信息,
tooltip: {
trigger: ‘axis’,
},//更多用法参考echarts配置项:option–>tooltip

legend://标注option–>legend
legend: {
selectedMode: false, //不可点击
data: [“温度/℃”, “雨量/mm”],
right: “20px”,
top: “20px”,
textStyle: {
color: “#fff”,
fontWeight: “lighter”
}
},
grid://偏移量option–>grid
grid: {
top: “5%”,
bottom: “5%”,
left: 0,
right: 0
},
xAxis中重要配置项

        xAxis: {
         type: "category",//类型
         show: true,//是否显示x轴
         boundaryGap: false,//两侧留白
         axisLine: {
           lineStyle: {//轴线样式
             color: "#fff"
           }
         },
         axisTick: {
           show: false//是否显示轴线刻度
         },
         data: [2,3,4,5,6,7,8,9]//轴线刻度数值
       },

series中
series: [
{
name: “温度/℃”,//如果用到标注(legend属性),此处name和legend中data对应。
yAxisIndex: 0,//双y轴用到,此处设置了索引,才能和y轴对应,顾名思义,yAxisIndex,此处对应第一条y轴
data: [ ],
type: “line”,//折线图
showSymbol: true,
connectNulls: true, //是否连接空数据,如果返回的数据有空值的,不用这个属性中间会断掉哦
clipOverflow: false,
areaStyle: {//区域填色(渐变)
color: {
type: “linear”,
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: “rgb(105, 255, 221)” // 0% 处的颜色
},
{
offset: 1,
color: “rgba(105, 255, 221,0)” // 100% 处的颜色
}
],
global: false // 缺省为 false
}
},
smooth: true,
label: {折线图中显示数值
show: true,
color: “#FFDC99”,
position: “top”
},
itemStyle: {
normal: {
color: “#69FFDD”,
type: “solid”
}
}
},
{
name: “雨量/mm”,
yAxisIndex: 1,//对应第二条y轴
data: [ ],//数据
type: “bar”,//柱状图
smooth: true,
label: {
show: true,
color: “#fff”,
position: “top”
},
itemStyle: {
normal: {
color: {
type: “linear”,
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: “#fff” // 0% 处的颜色
},
{
offset: 1,
color: “rgb(247, 243, 243,0)” // 100% 处的颜色
}
],
global: false // 缺省为 false
},
type: “solid”
}
}
}
]
yAxis中
基本配置与xAxis一样

解决双y轴0刻度对不齐的问题看此处

本案例中要实现图中效果:在这里插入图片描述

雨量信息的数值所对应的y轴和温度数值对应的y轴不一致。所以得用到双y轴。
雨量值不可能为负,但是温度可以为负,在这里我给y轴设置了最大最小值,如温度y轴最小值为负时,会出现雨量y轴起始点为0,温度y轴起始点为负的情况:
在这里插入图片描述
所以要想双y轴0刻度线对齐,必须根据温度最大值与最小值比例关系计算出雨量最大最小值。
在data数据外层定义一个变量,以便记录温度最大最小值比例
let scale = ’ '具体实现请看代码:

 yAxis: [
          {
            type: "value",
            show:false,
            name: "温度/℃",
            axisLine: {
              lineStyle: {
                color: "#fff"
              }
            },
            ·············································································
            min: function(value) {//value是series数据层中温度数据data,value.min,value.max可拿到最小值和最大值
              scale = "";//先清空比例,防止上次请求的数据的比例干扰
              if (value.min < 0) {
                scale = Math.abs(value.min) / Math.abs(value.max);//此处如果value.max值为负,scale没有意义,在下面的max里有进一步的处理
                return value.min * 1.2;//这里我设置的y轴最小值(注意区分y轴最大/最小和数据最大最小)为数据最小值的1.2倍以达到更好用户体样,注意,如果此处设置了倍数,雨量y轴的数值倍数要同步
              } else {
                return 0;//如果最小值大于等于0,y轴最小值为0
              }
            },
            max: function(value) {
              if (value.max > 0) {
                return value.max * 1.2;//y轴最大值也放大1.2倍,
              } else {
                scale = 1;
                return Math.abs(value.min * 1.2);//如果最大值小于零,y轴最大值与y轴最小值绝对值相等,也就是上下各占一半。
              }
            },
            ················································································································
            axisTick: {
              show: false
            }
          },
          {
            type: "value",
            show: false,
            name: "雨量/mm",
            ·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            min: function(value) {
              if (scale) {
                if (value.max < 20) {
                  return -scale * value.max * 1.2 * 15;//乘以15是为了折线图与柱状图更好区分开
                } else {
                  return -scale * value.max * 1.2 * 1.5;//乘以1.5是为了折线图与柱状图更好区分开
                }
              } else {
                return 0;
              }
            },
            max: function(value) {
              if (value.max < 20) {
                return value.max * 1.2 * 15;
              } else {
                return value.max * 1.2 * 1.5;
              }
            },
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            axisLine: {
              lineStyle: {
                color: "#fff"
              }
            },
            axisTick: {
              show: false
            }
          }
        ],
Vue 2 使用 Echarts 来绘制x轴柱状图,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了 EchartsVue: ```bash npm install echarts vue-echarts ``` 2. 在你的 Vue 组件引入 EchartsVueECharts: ```javascript import ECharts from 'vue-echarts'; import 'echarts/lib/chart/bar'; import 'echarts/lib/component/tooltip'; import 'echarts/lib/component/title'; ``` 3. 在模板使用 ECharts 组件,并设置配置项: ```html <template> <div> <e-charts :options="chartOptions" style="height: 400px;"></e-charts> </div> </template> ``` 4. 在组件的 data 定义x轴柱状图配置项: ```javascript export default { data() { return { chartOptions: { title: { text: 'x轴柱状图', }, tooltip: {}, xAxis: [ { type: 'category', data: ['A', 'B', 'C', 'D', 'E'], }, { type: 'category', data: ['F', 'G', 'H', 'I', 'J'], gridIndex: 1, }, ], yAxis: [ { type: 'value', name: '数值', }, ], series: [ { name: '系列1', type: 'bar', data: [10, 20, 30, 40, 50], }, { name: '系列2', type: 'bar', xAxisIndex: 1, yAxisIndex: 0, data: [5, 15, 25, 35, 45], }, ], }, }; }, }; ``` 在上述代码配置的 xAxis 数组定义了两个 x 轴,分别对应两组柱状图的数据。series 数组的第二个系列(系列2)使用了第二个 x 轴。 这样,你就可以在 Vue 2 使用 Echarts 绘制x轴柱状图了。记得根据你的实际需求修改数据和样式。希望对你有所帮助!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值