一、第一种效果
效果图
使用步骤
完整实例,copy就可直接使用
-
<template>
-
<div :class="className" :style="{height:height,width:width}" />
-
</template>
-
<script>
-
import echarts from 'echarts'
-
require('echarts/theme/macarons') // echarts theme
-
import resize from '@/views/dashboard/mixins/resize'
-
export default {
-
mixins: [resize],
-
props: {
-
className: {
-
type: String,
-
default: 'chart'
-
},
-
width: {
-
type: String,
-
default: '100%'
-
},
-
height: {
-
type: String,
-
default: '400px'
-
},
-
dataList: {
-
type: Array,
-
default: []
-
}
-
},
-
data() {
-
return {
-
chart: null,
-
xAxisData: ['数学', '语文', '英语', '物理', '化学'],
-
data1: [200, 100, 200, 50, 100],
-
data2: [300, 200, 300, 200, 300]
-
}
-
},
-
mounted() {
-
this.$nextTick(() => {
-
this.initChart()
-
})
-
},
-
beforeDestroy() {
-
if (!this.chart) {
-
return
-
}
-
this.chart.dispose()
-
this.chart = null
-
},
-
watch: {
-
dataList(val, oldVal) {//普通的watch监听
-
this.initChart()
-
}
-
},
-
methods: {
-
initChart() {
-
this.chart = echarts.init(this.$el, 'macarons')
-
this.chart.setOption(
-
{
-
tooltip: {
-
trigger: 'item'
-
},
-
grid: {
-
top: '10%',
-
bottom: '20%',
-
right: '2%',
-
left: '10%'
-
},
-
legend: {
-
data: ['2021', '2022'],
-
left: '20px',
-
textStyle: {
-
color: '#FFFFFF'
-
}
-
},
-
graphic: [
-
{
-
type: 'image', // 图形元素类型
-
id: 'logo', // 更新或删除图形元素时指定更新哪个图形元素,如果不需要用可以忽略。
-
right: 'center', // 根据父元素进行定位 (居中)
-
bottom: '0%', // 根据父元素进行定位 (0%), 如果bottom的值是 0,也可以删除该bottom属性值。
-
z: 0, // 层叠
-
bounding: 'all', // 决定此图形元素在定位时,对自身的包围盒计算方式
-
style: {
-
image:
-
'https://img0.baidu.com/it/u=3846011338,1538056540&fm=253&fmt=auto&app=138&f=PNG?w=889&h=500', // 这里一定要注意、注意,必须是https开头的图片路径地址
-
width: 800,
-
height: 400
-
}
-
}
-
],
-
xAxis: {
-
data: this.xAxisData,
-
axisTick: {
-
show: false
-
},
-
axisLine: {
-
show: false
-
},
-
axisLabel: {
-
interval: 0,
-
textStyle: {
-
color: '#fff',
-
fontSize: 20
-
},
-
margin: 40
-
}
-
},
-
yAxis: {
-
splitLine: {
-
show: false
-
},
-
axisTick: {
-
show: true,
-
alignWithLabel: true,
-
inside: true
-
},
-
axisLine: {
-
show: true
-
},
-
axisLabel: {
-
textStyle: {
-
color: '#fff',
-
fontSize: 20
-
}
-
}
-
},
-
series: [
-
// 底部的光晕
-
{
-
name: '',
-
type: 'pictorialBar',
-
tooltip: {
-
show: false
-
},
-
symbolSize: [90, 40],
-
symbolOffset: [0, 20],
-
z: 1,
-
itemStyle: {
-
normal: {
-
color: 'transparent',
-
borderColor: '#26B2E8',
-
borderType: 'solid',
-
borderWidth: 1
-
}
-
},
-
data: [1, 1, 1, 1, 1]
-
},
-
{
-
name: '2021',
-
type: 'bar',
-
barWidth: 45,
-
barGap: '-100%',
-
z: 0,
-
itemStyle: {
-
color: '#E8CCFF',
-
opacity: 0.7
-
},
-
data: this.data2
-
},
-
{
-
name: '2022',
-
type: 'bar',
-
barWidth: 45,
-
barGap: '-100%',
-
itemStyle: {
-
color: '#FF9A22'
-
},
-
data: this.data1
-
},
-
//头部、中部、尾部圆片
-
{
-
name: '2021', // 头部
-
type: 'pictorialBar',
-
symbolSize: [45, 25],
-
symbolOffset: [0, -10],
-
z: 12,
-
symbolPosition: 'end',
-
itemStyle: {
-
color: '#D28EFF',
-
opacity: 1
-
},
-
data: this.data2
-
},
-
{
-
name: '2022',//中部
-
type: 'pictorialBar',
-
symbolSize: [45, 25],
-
symbolOffset: [0, -10],
-
z: 12,
-
symbolPosition: 'end',
-
itemStyle: {
-
opacity: 1,
-
color: '#FF3EFF'
-
},
-
data: this.data1
-
},
-
{
-
//三个最低下的圆片
-
name: '',
-
type: 'pictorialBar',
-
symbolSize: [45, 25],
-
symbolOffset: [0, 10],
-
z: 12,
-
itemStyle: {
-
opacity: 1,
-
color: 'red'
-
},
-
data: this.data1
-
}
-
]
-
}
-
)
-
}
-
}
-
}
-
</script>
-
itemStyle: {
-
normal: {
-
//这里是颜色
-
color: function (params) {
-
//注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
-
var colorList = ['#00A3E0', '#FFA100', '#ffc0ca', '#CCCCCC', '#749f83', '#04A035', '#8729D9', '#c207c9', '#c90762', '#c90707'];
-
return colorList[params.dataIndex]
-
}
-
}
-
}
附带网图背景
二、第二种效果
效果图
使用步骤
完整实例,copy就可直接使用
-
<template>
-
<div :class="className" :style="{height:height,width:width}" />
-
</template>
-
<script>
-
import echarts from 'echarts'
-
require('echarts/theme/macarons') // echarts theme
-
import resize from '@/views/dashboard/mixins/resize'
-
export default {
-
mixins: [resize],
-
props: {
-
className: {
-
type: String,
-
default: 'chart'
-
},
-
width: {
-
type: String,
-
default: '100%'
-
},
-
height: {
-
type: String,
-
default: '400px'
-
},
-
dataList: {
-
type: Array,
-
default: []
-
}
-
},
-
data() {
-
return {
-
chart: null,
-
xAxisData: ['区域1', '区域2', '区域3', '区域4', '区域5', '区域6', '区域7', '区域8', '区域9'],
-
colorArr: ['#0C628C', '#3887D5', '#2570BB'],
-
barWidth: 30,
-
data1: [6, 7, 3, 11, 33, 38, 22, 55, 66],
-
bottomData: [1, 1, 1, 1, 1, 1, 1, 1, 1],
-
topData: [100, 100, 100, 100, 100, 100, 100, 100, 100],
-
names: ["区域"]
-
}
-
},
-
mounted() {
-
this.$nextTick(() => {
-
this.initChart()
-
})
-
},
-
beforeDestroy() {
-
if (!this.chart) {
-
return
-
}
-
this.chart.dispose()
-
this.chart = null
-
},
-
watch: {
-
dataList(val, oldVal) {//普通的watch监听
-
this.initChart()
-
}
-
},
-
methods: {
-
initChart() {
-
var color = {
-
type: 'linear',
-
x: 0,
-
x2: 1,
-
y: 0,
-
y2: 0,
-
colorStops: [
-
{
-
offset: 0,
-
color: this.colorArr[0]
-
},
-
{
-
offset: 0.5,
-
color: this.colorArr[0]
-
},
-
{
-
offset: 0.5,
-
color: this.colorArr[1]
-
},
-
{
-
offset: 1,
-
color: this.colorArr[1]
-
}
-
]
-
}
-
this.chart = echarts.init(this.$el, 'macarons')
-
this.chart.setOption(
-
{
-
tooltip: {
-
trigger: 'axis',
-
formatter: function (params) {
-
var str = params[0].name + ':'
-
params.filter(function (item) {
-
if (item.componentSubType == 'bar' && item.seriesName === '数据') {
-
str += item.value
-
}
-
})
-
return str
-
}
-
},
-
grid: {
-
left: '0%',
-
right: '10%',
-
bottom: '3%',
-
containLabel: true
-
},
-
xAxis: [
-
{
-
type: 'category',
-
name: this.names[0],
-
data: this.xAxisData,
-
// 更改坐标轴颜色
-
axisLine: {
-
lineStyle: {
-
color: "#FFFFFF"
-
},
-
onZero: false
-
},
-
// x轴的字体样式
-
axisLabel: {
-
interval: 0,
-
textStyle: {
-
color: "#FFFFFF", // 更改坐标轴文字颜色
-
fontSize: 14, // 更改坐标轴文字大小
-
fontFamily: 'MicrosoftYaHei'
-
},
-
}
-
}
-
],
-
yAxis: [
-
{
-
type: 'value',
-
name: '得分',
-
axisLabel: {
-
formatter: '{value}',
-
textStyle: {
-
color: this.fontColorY, // 更改坐标轴文字颜色
-
fontSize: 12, // 更改坐标轴文字大小
-
fontFamily: 'MicrosoftYaHei'
-
}
-
},
-
// 更改坐标轴颜色
-
axisLine: {
-
lineStyle: {
-
color: "#FFFFFF"
-
}
-
},
-
// 网格线
-
splitLine: {
-
// 网格线
-
lineStyle: {
-
type: 'solid',
-
with: 0.5,
-
color: this.borderColor
-
}
-
}
-
}
-
],
-
series: [
-
// 数据低下的圆片
-
{
-
name: '',
-
type: 'pictorialBar',
-
symbolOffset: ['0%', '50%'],
-
symbolSize: [this.barWidth - 4, (10 * (this.barWidth - 4)) / this.barWidth],
-
z: 12,
-
symbol: 'diamond',
-
itemStyle: {
-
opacity: 1,
-
color: color
-
// color: 'transparent'
-
},
-
data: this.bottomData
-
},
-
// 数据的柱状图
-
{
-
name: '数据',
-
type: 'bar',
-
barWidth: this.barWidth,
-
itemStyle: {
-
// lenged文本
-
opacity: 1, // 这个是 透明度
-
color: color
-
},
-
data: this.data1
-
},
-
// 替代柱状图 默认不显示颜色,是最下方柱图的value值 - 20
-
{
-
type: 'bar',
-
symbol: 'diamond',
-
barWidth: this.barWidth + 2,
-
itemStyle: {
-
color: 'transparent'
-
},
-
data: this.data1
-
},
-
// 数据顶部的样式
-
{
-
name: '',
-
type: 'pictorialBar',
-
symbol: 'diamond',
-
symbolOffset: ['0%', '-50%'],
-
symbolSize: [this.barWidth, 10],
-
z: 12,
-
itemStyle: {
-
normal: {
-
opacity: 1,
-
color: this.colorArr[2],
-
label: {
-
show: true, // 开启显示
-
position: 'top', // 在上方显示
-
textStyle: {
-
// 数值样式
-
color: '#FFFFFF',
-
fontSize: 12,
-
top: 50
-
}
-
}
-
}
-
},
-
symbolPosition: 'end',
-
data: this.data1
-
},
-
// 阴影的顶部
-
{
-
name: '', // 头部
-
type: 'pictorialBar',
-
symbol: 'diamond',
-
symbolOffset: ['0%', '-50%'],
-
symbolSize: [this.barWidth, 10],
-
z: 12,
-
symbolPosition: 'end',
-
itemStyle: {
-
color: 'blue',
-
opacity: 0.3,
-
borderWidth: 1,
-
borderColor: 'rgba(18, 47, 133,1)'
-
},
-
data: this.topData
-
},
-
// 后面的背景
-
{
-
name: '',
-
type: 'bar',
-
barWidth: this.barWidth,
-
barGap: '-100%',
-
z: 0,
-
itemStyle: {
-
color: 'rgba(18, 47, 133,0.3)'
-
},
-
data: this.topData
-
}
-
]
-
}
-
)
-
}
-
}
-
}
-
</script>
三、第三种效果
效果图
使用步骤
完整实例,copy就可直接使用
-
<template>
-
<div :class="className" :style="{height:height,width:width}" />
-
</template>
-
<script>
-
import echarts from 'echarts'
-
require('echarts/theme/macarons') // echarts theme
-
import resize from '@/views/dashboard/mixins/resize'
-
export default {
-
mixins: [resize],
-
props: {
-
className: {
-
type: String,
-
default: 'chart'
-
},
-
width: {
-
type: String,
-
default: '100%'
-
},
-
height: {
-
type: String,
-
default: '400px'
-
},
-
dataList: {
-
type: Array,
-
default: []
-
}
-
},
-
data() {
-
return {
-
chart: null,
-
MAX: [800, 800, 800, 800, 800, 800, 800],
-
NAME: [2015, 2016, 2017, 2018, 2019, 2020, 2021],
-
VALUE: [200, 400, 300, 500, 700, 300, 100],
-
VALUE2: [500, 200, 700, 400, 300, 600, 400],
-
}
-
},
-
mounted() {
-
this.$nextTick(() => {
-
this.initChart()
-
})
-
},
-
beforeDestroy() {
-
if (!this.chart) {
-
return
-
}
-
this.chart.dispose()
-
this.chart = null
-
},
-
watch: {
-
dataList(val, oldVal) {//普通的watch监听
-
this.initChart()
-
}
-
},
-
methods: {
-
initChart() {
-
const offsetX = 16;
-
const offsetY = 8;
-
[-18, 18].forEach((customOffset, index) => {
-
const CubeLeft = echarts.graphic.extendShape({
-
shape: {
-
x: 0,
-
y: 0,
-
},
-
buildPath: function (ctx, shape) {
-
const xAxisPoint = shape.xAxisPoint;
-
const c0 = [shape.x - customOffset, shape.y];
-
const c1 = [shape.x - offsetX - customOffset, shape.y - offsetY];
-
const c2 = [xAxisPoint[0] - offsetX - customOffset, xAxisPoint[1] - offsetY];
-
const c3 = [xAxisPoint[0] - customOffset, xAxisPoint[1]];
-
ctx.moveTo(c0[0], c0[1]).lineTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).closePath();
-
},
-
});
-
const CubeRight = echarts.graphic.extendShape({
-
shape: {
-
x: 0,
-
y: 0,
-
},
-
buildPath: function (ctx, shape) {
-
const xAxisPoint = shape.xAxisPoint;
-
const c1 = [shape.x - customOffset, shape.y];
-
const c2 = [xAxisPoint[0] - customOffset, xAxisPoint[1]];
-
const c3 = [xAxisPoint[0] + offsetX - customOffset, xAxisPoint[1] - offsetY];
-
const c4 = [shape.x + offsetX - customOffset, shape.y - offsetY];
-
ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath();
-
},
-
});
-
const CubeTop = echarts.graphic.extendShape({
-
shape: {
-
x: 0,
-
y: 0,
-
},
-
buildPath: function (ctx, shape) {
-
const c1 = [shape.x - customOffset, shape.y];
-
const c2 = [shape.x + offsetX - customOffset, shape.y - offsetY];
-
const c3 = [shape.x - customOffset, shape.y - offsetX];
-
const c4 = [shape.x - offsetX - customOffset, shape.y - offsetY];
-
ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath();
-
},
-
});
-
echarts.graphic.registerShape('CubeLeft' + index, CubeLeft);
-
echarts.graphic.registerShape('CubeRight' + index, CubeRight);
-
echarts.graphic.registerShape('CubeTop' + index, CubeTop);
-
});
-
this.chart = echarts.init(this.$el, 'macarons')
-
this.chart.setOption(
-
{
-
backgroundColor: '#012366',
-
grid: {
-
left: '1%',
-
right: '8%',
-
bottom: '5%',
-
top: '8%',
-
containLabel: true,
-
},
-
tooltip: {
-
trigger: 'axis',
-
axisPointer: { // 坐标轴指示器,坐标轴触发有效
-
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
-
},
-
formatter: function (e) {
-
var str =
-
e[2].axisValue +
-
"<br>" +
-
"<span style='display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:" +
-
"rgba(225,155,172, 1)" +
-
";'></span>" +
-
"课程数量 : " +
-
e[2].value +
-
"<br>" +
-
"<span style='display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:" +
-
"rgba(25,155,172, 1)" +
-
";'></span>" +
-
"完成数量 : " +
-
e[3].value;
-
return str;
-
},
-
},
-
legend: {
-
orient: 'vertical',
-
x: 'right',
-
y: 'center',
-
data: ['课程数量', '完成数量',]
-
},
-
xAxis: {
-
type: 'category',
-
data: this.NAME,
-
name:"年份",
-
axisLine: {
-
show: true,
-
lineStyle: {
-
width: 2,
-
color: '#7ca7d9',
-
},
-
},
-
axisTick: {
-
show: false,
-
},
-
axisLabel: {
-
fontSize: 14,
-
},
-
},
-
yAxis: {
-
type: 'value',
-
name:"数量",
-
minInterval: 1,
-
axisLine: {
-
show: true,
-
lineStyle: {
-
width: 2,
-
color: '#2B7BD6',
-
},
-
},
-
splitLine: {
-
show: true,
-
lineStyle: {
-
color: 'rgba(201,217,241,0.23)',
-
},
-
},
-
axisTick: {
-
show: false,
-
},
-
axisLabel: {
-
fontSize: 14,
-
},
-
},
-
dataZoom: [{
-
show: true,
-
height: 10,
-
xAxisIndex: [
-
0
-
],
-
bottom: 0,
-
start: 10,
-
end: 50,
-
handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z',
-
handleSize: '110%',
-
handleStyle: {
-
color: "#d3dee5",
-
},
-
textStyle: {
-
color: "#fff"
-
},
-
borderColor: "#90979c"
-
}, {
-
type: "inside",
-
show: true,
-
height: 15,
-
start: 1,
-
end: 10
-
}],
-
series: [
-
{
-
// 最大高度
-
type: 'custom',
-
renderItem: function (params, api) {
-
const location = api.coord([api.value(0), api.value(1)])
-
return {
-
type: 'group',
-
children: [{
-
type: 'CubeLeft0',
-
shape: {
-
api,
-
x: location[0],
-
y: location[1],
-
xAxisPoint: api.coord([api.value(0), 0])
-
},
-
style: {
-
fill: `rgba(25,155,172, .1)`
-
}
-
}, {
-
type: 'CubeRight0',
-
shape: {
-
api,
-
x: location[0],
-
y: location[1],
-
xAxisPoint: api.coord([api.value(0), 0])
-
},
-
style: {
-
fill: `rgba(25,155,172, .3)`
-
}
-
}, {
-
type: 'CubeTop0',
-
shape: {
-
api,
-
x: location[0],
-
y: location[1],
-
xAxisPoint: api.coord([api.value(0), 0])
-
},
-
style: {
-
fill: `rgba(25,155,172, .4)`
-
}
-
}]
-
}
-
},
-
data: this.MAX
-
},
-
{
-
// 最大高度
-
type: 'custom',
-
renderItem: function (params, api) {
-
const location = api.coord([api.value(0), api.value(1)])
-
return {
-
type: 'group',
-
children: [{
-
type: 'CubeLeft1',
-
shape: {
-
api,
-
x: location[0],
-
y: location[1],
-
xAxisPoint: api.coord([api.value(0), 0])
-
},
-
style: {
-
fill: `rgba(225,155,172, .1)`
-
}
-
}, {
-
type: 'CubeRight1',
-
shape: {
-
api,
-
x: location[0],
-
y: location[1],
-
xAxisPoint: api.coord([api.value(0), 0])
-
},
-
style: {
-
fill: `rgba(225,155,172, .3)`
-
}
-
}, {
-
type: 'CubeTop1',
-
shape: {
-
api,
-
x: location[0],
-
y: location[1],
-
xAxisPoint: api.coord([api.value(0), 0])
-
},
-
style: {
-
fill: `rgba(225,155,172, .4)`
-
}
-
}]
-
}
-
},
-
data: this.MAX
-
},
-
{
-
type: 'custom',
-
renderItem: (params, api) => {
-
const location = api.coord([api.value(0), api.value(1)]);
-
return {
-
type: 'group',
-
children: [
-
{
-
type: 'CubeLeft0',
-
shape: {
-
api,
-
xValue: api.value(0),
-
yValue: api.value(1),
-
x: location[0] - 0,
-
y: location[1],
-
xAxisPoint: api.coord([api.value(0), 0]),
-
},
-
style: {
-
fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-
{
-
offset: 0,
-
color: 'rgba(25,155,172, .5)',
-
},
-
{
-
offset: 1,
-
color: 'rgba(25,155,172, .5)',
-
},
-
]),
-
},
-
},
-
{
-
type: 'CubeRight0',
-
shape: {
-
api,
-
xValue: api.value(0),
-
yValue: api.value(1),
-
x: location[0] - 0,
-
y: location[1],
-
xAxisPoint: api.coord([api.value(0), 0]),
-
},
-
style: {
-
fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-
{
-
offset: 0,
-
color: 'rgba(25,155,172, 1)',
-
},
-
{
-
offset: 1,
-
color: 'rgba(25,155,172, .5)',
-
},
-
]),
-
},
-
},
-
{
-
type: 'CubeTop0',
-
shape: {
-
api,
-
xValue: api.value(0),
-
yValue: api.value(1),
-
x: location[0] - 0,
-
y: location[1],
-
xAxisPoint: api.coord([api.value(0), 0]),
-
},
-
style: {
-
fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-
{
-
offset: 0,
-
color: 'rgba(25,155,172, .8)',
-
},
-
{
-
offset: 1,
-
color: 'rgba(25,155,172, .8)',
-
},
-
]),
-
},
-
},
-
],
-
};
-
},
-
data: this.VALUE,
-
},
-
{
-
type: 'custom',
-
renderItem: (params, api) => {
-
const location = api.coord([api.value(0), api.value(1)]);
-
return {
-
type: 'group',
-
children: [
-
{
-
type: 'CubeLeft1',
-
shape: {
-
api,
-
xValue: api.value(0),
-
yValue: api.value(1),
-
x: location[0] - 0,
-
y: location[1],
-
xAxisPoint: api.coord([api.value(0), 0]),
-
},
-
style: {
-
fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-
{
-
offset: 0,
-
color: 'rgba(225,155,172, .5)',
-
},
-
{
-
offset: 1,
-
color: 'rgba(225,155,172, .5)',
-
},
-
]),
-
},
-
},
-
{
-
type: 'CubeRight1',
-
shape: {
-
api,
-
xValue: api.value(0),
-
yValue: api.value(1),
-
x: location[0] - 0,
-
y: location[1],
-
xAxisPoint: api.coord([api.value(0), 0]),
-
},
-
style: {
-
fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-
{
-
offset: 0,
-
color: 'rgba(225,155,172, 1)',
-
},
-
{
-
offset: 1,
-
color: 'rgba(225,155,172, .5)',
-
},
-
]),
-
},
-
},
-
{
-
type: 'CubeTop1',
-
shape: {
-
api,
-
xValue: api.value(0),
-
yValue: api.value(1),
-
x: location[0] - 0,
-
y: location[1],
-
xAxisPoint: api.coord([api.value(0), 0]),
-
},
-
style: {
-
fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-
{
-
offset: 0,
-
color: 'rgba(225,155,172, .8)',
-
},
-
{
-
offset: 1,
-
color: 'rgba(225,155,172, .8)',
-
},
-
]),
-
},
-
},
-
],
-
};
-
},
-
data: this.VALUE2,
-
},
-
],
-
}
-
)
-
}
-
}
-
}
-
</script>
四、第四种效果
效果图
使用步骤
完整实例,copy就可直接使用
-
<template>
-
<div :class="className" :style="{height:height,width:width}" />
-
</template>
-
<script>
-
import echarts from 'echarts'
-
require('echarts/theme/macarons') // echarts theme
-
import resize from '@/views/dashboard/mixins/resize'
-
export default {
-
mixins: [resize],
-
props: {
-
className: {
-
type: String,
-
default: 'chart'
-
},
-
width: {
-
type: String,
-
default: '100%'
-
},
-
height: {
-
type: String,
-
default: '400px'
-
},
-
dataList: {
-
type: Array,
-
default: []
-
}
-
},
-
data() {
-
return {
-
chart: null,
-
targetData: [50, 60, 40, 80, 120, 90, 70],
-
manualData: [22, 35, 30, 25, 12, 41, 51],
-
mechanismData: [40, 45, 40, 55, 22, 46, 61],
-
xData:['1月', '2月', '3月', '4月', '5月', '6月', '7月'],
-
names:['手工', '机制', '目标值']
-
}
-
},
-
mounted() {
-
this.$nextTick(() => {
-
this.initChart()
-
})
-
},
-
beforeDestroy() {
-
if (!this.chart) {
-
return
-
}
-
this.chart.dispose()
-
this.chart = null
-
},
-
watch: {
-
dataList(val, oldVal) {//普通的watch监听
-
this.initChart()
-
}
-
},
-
methods: {
-
initChart() {
-
const color1 = {
-
type: 'linear',
-
x: 1,
-
y: 0,
-
x2: 1,
-
y2: 1,
-
colorStops: [
-
{
-
offset: 0,
-
color: '#9DCAF4'
-
},
-
{
-
offset: 0.8,
-
color: '#0B87FB'
-
}
-
]
-
};
-
const color2 = {
-
type: 'linear',
-
x: 1,
-
y: 0,
-
x2: 1,
-
y2: 1,
-
colorStops: [
-
{
-
offset: 0,
-
color: '#31D5C7'
-
},
-
{
-
offset: 0.8,
-
color: 'rgba(29, 39, 115,0.2)'
-
}
-
]
-
};
-
this.chart = echarts.init(this.$el, 'macarons')
-
this.chart.setOption(
-
{
-
legend: {
-
data: this.names,
-
x: 'right',
-
textStyle: {
-
// 图例文字大小颜色
-
fontSize: 12,
-
color: '#ffffff'
-
}
-
},
-
tooltip: {
-
trigger: 'axis',
-
axisPointer: {
-
type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
-
}
-
},
-
grid: {
-
left: '1%',
-
right: '1%',
-
bottom: '2%',
-
top: '12%',
-
containLabel: true
-
},
-
xAxis: {
-
type: 'category',
-
data: this.xData,
-
axisLabel: {
-
color: '#fff'
-
},
-
axisLine: {
-
show: true,
-
lineStyle: {
-
color: 'rgba(255, 255, 2555, 0.1)'
-
}
-
}
-
},
-
yAxis: [
-
{
-
type: 'value',
-
name: '制作数量',
-
axisLabel: {
-
color: '#fff',
-
axisLabel: {
-
color: '#fff',
-
//y轴文字的配置
-
textStyle: {
-
color: "#fff",
-
},
-
},
-
},
-
splitLine: {
-
show: true,
-
lineStyle: {
-
color: 'rgba(255,255,255,0.2)'
-
}
-
},
-
nameTextStyle: {
-
//y轴上方单位的颜色
-
color: "#fff",
-
},
-
},
-
{
-
type: 'value',
-
name: '目标值',
-
min: 0,
-
max: 250,
-
interval: 50,
-
axisLabel: {
-
color: '#fff',
-
//y轴文字的配置
-
textStyle: {
-
color: "#fff",
-
},
-
},
-
splitLine: {
-
show: false,
-
lineStyle: {
-
color: 'rgba(255,255,255,0.2)'
-
}
-
},
-
nameTextStyle: {
-
//y轴上方单位的颜色
-
color: "#fff",
-
},
-
}
-
],
-
series: [
-
{
-
itemStyle: {
-
normal: {
-
// 这里是用一个柱子,从左到右的渐变。也可以用两个柱子做从上往下的渐变,和上面的透明渐变一样用法
-
color: color1
-
}
-
},
-
data: this.manualData,
-
type: 'bar',
-
barWidth: 19,
-
z: 2,
-
name: this.names[0]
-
},
-
{
-
z: 3,
-
name: this.names[0],
-
type: 'pictorialBar',
-
// 柱子顶部
-
symbolPosition: 'end',
-
data: this.manualData,
-
symbol: 'diamond',
-
symbolOffset: ['-12', -11],
-
symbolRotate: 90,
-
symbolSize: [10, 21],
-
itemStyle: {
-
normal: {
-
borderWidth: 1,
-
color: 'blue'
-
}
-
},
-
tooltip: {
-
show: false
-
}
-
},
-
{
-
itemStyle: {
-
normal: {
-
// 这里是用一个柱子,从左到右的渐变。也可以用两个柱子做从上往下的渐变,和上面的透明渐变一样用法
-
color: color2
-
}
-
},
-
data: this.mechanismData,
-
type: 'bar',
-
barWidth: 19,
-
z: 2,
-
name: this.names[1]
-
},
-
{
-
z: 3,
-
name: this.names[1],
-
type: 'pictorialBar',
-
// 柱子顶部
-
symbolPosition: 'end',
-
data: this.mechanismData,
-
symbol: 'diamond',
-
symbolOffset: [12, -11],
-
symbolRotate: 90,
-
symbolSize: [8, 19],
-
itemStyle: {
-
normal: {
-
borderWidth: 1,
-
color: 'green'
-
}
-
},
-
tooltip: {
-
show: false
-
}
-
},
-
{
-
name: this.names[2],
-
type: 'line',
-
yAxisIndex: 1,
-
data: this.targetData,
-
itemStyle: {
-
normal: {
-
color: '#FFDE55', //圈圈的颜色
-
lineStyle: {
-
color: '#FFDE55' //线的颜色
-
}
-
}
-
}
-
}
-
]
-
}
-
)
-
}
-
}
-
}
-
</script>
五、第五种效果
效果图
使用步骤
完整实例,copy就可直接使用
-
<template>
-
<div :class="className" :style="{height:height,width:width}" />
-
</template>
-
<script>
-
import echarts from 'echarts'
-
require('echarts/theme/macarons') // echarts theme
-
import resize from '@/views/dashboard/mixins/resize'
-
export default {
-
mixins: [resize],
-
props: {
-
className: {
-
type: String,
-
default: 'chart'
-
},
-
width: {
-
type: String,
-
default: '100%'
-
},
-
height: {
-
type: String,
-
default: '400px'
-
},
-
dataList: {
-
type: Array,
-
default: []
-
},
-
titleName: {
-
type: String,
-
default: 'echarts'
-
},
-
names: {
-
type: Array,
-
default: ['成本', '目标']
-
}
-
},
-
data() {
-
return {
-
chart: null,
-
sourceList: [],
-
listData1: [],
-
dataBottom: [],
-
listData2: [],
-
max: 0,
-
maxDate1: 0,
-
maxDate2: 0,
-
}
-
},
-
mounted() {
-
this.$nextTick(() => {
-
this.initChart()
-
})
-
},
-
beforeDestroy() {
-
if (!this.chart) {
-
return
-
}
-
this.chart.dispose()
-
this.chart = null
-
},
-
watch: {
-
dataList(val, oldVal) {//普通的watch监听
-
this.initChart()
-
}
-
},
-
methods: {
-
initChart() {
-
this.chart = echarts.init(this.$el, 'macarons')
-
this.sourceList = []
-
this.listData1 = []
-
this.listData2 = []
-
for (let i = 0; i < this.dataList.length; i++) {
-
this.sourceList.push(this.dataList[i].techName)
-
this.listData1.push((this.dataList[i].oneNum))
-
this.dataBottom.push(1)
-
this.listData2.push(this.dataList[i].twoNum)
-
}
-
this.sourceList = ["2024","2023","2022","2021","2020","2019","2018"]
-
this.listData1 = [12,10,0,9,0,5,8]
-
this.dataBottom = [1,1,1,1,1,1,1]
-
this.listData2 = [11,12,15,6,22,15,10]
-
//获取纵坐标最大值--start
-
this.maxDate1 = this.listData1[0];
-
for (let i = 0; i < this.listData1.length; i++) {
-
let item = this.listData1[i];
-
item > this.maxDate1 ? this.maxDate1 = item : this.maxDate1 = this.maxDate1;
-
}
-
this.maxDate2 = this.listData2[0];
-
for (let i = 0; i < this.listData2.length; i++) {
-
let item = this.listData2[i];
-
item > this.maxDate2 ? this.maxDate2 = item : this.maxDate2 = this.maxDate2;
-
}
-
this.maxDate1 = this.maxDate1 + 1
-
this.maxDate2 = this.maxDate2 + 1
-
//获取纵坐标最大值--end
-
this.chart.setOption({
-
tooltip: {
-
trigger: 'axis',
-
axisPointer: {
-
type: 'cross',
-
label: {
-
backgroundColor: '#6a7985'
-
}
-
},
-
formatter: function (params) {
-
var str = '<div style=" font-size: 16px;color:#FFFFFF">'
-
str = str + params[0].name + '<br>'
-
params.filter(function (item) {
-
if (item.componentSubType === 'bar' || item.componentSubType === 'line') {
-
str = str + item.seriesName + ':' + item.data + '<br>'
-
}
-
})
-
str = str + '</div>'
-
return str;
-
}
-
},
-
toolbox: {
-
feature: {
-
dataView: { show: true, readOnly: true },
-
magicType: { show: true, type: ['line', 'bar'] },
-
restore: { show: true },
-
saveAsImage: { show: true, backgroundColor: '#79B9F5', name: this.titleName }
-
},
-
right: '20px',
-
},
-
grid: {
-
left: '3%',
-
right: '3%',
-
bottom: '3%',
-
containLabel: true
-
},
-
legend: {
-
data: this.names,
-
left: '20px',
-
textStyle: {
-
color: '#FFFFFF'
-
}
-
},
-
xAxis: [
-
{
-
type: 'category',
-
data: this.sourceList,
-
axisLine: {
-
//x轴线的颜色以及宽度
-
show: true,
-
lineStyle: {
-
color: "#FFFFFF",
-
type: "solid",
-
},
-
},
-
axisPointer: {
-
type: 'shadow'
-
},
-
axisLabel: {
-
show: true,
-
rotate: 45, // 设置x轴标签旋转角度
-
margin: 15
-
}
-
}
-
],
-
yAxis: [
-
{
-
type: 'value',
-
name: this.names[0],
-
axisLabel: {
-
//y轴文字的配置
-
textStyle: {
-
color: "#fff",
-
},
-
},
-
axisLine: {
-
//y轴线的颜色以及宽度
-
show: true,
-
lineStyle: {
-
color: "#fff",
-
width: 1,
-
type: "solid",
-
},
-
},
-
splitLine: {
-
//分割线配置
-
show: false,
-
lineStyle: {
-
color: "#fff",
-
},
-
},
-
nameTextStyle: {
-
//y轴上方单位的颜色
-
color: "#fff",
-
},
-
max: this.maxDate1
-
},
-
{
-
type: 'value',
-
name: this.names[1],
-
axisLabel: {
-
//y轴文字的配置
-
textStyle: {
-
color: "#fff",
-
},
-
},
-
axisLine: {
-
//y轴线的颜色以及宽度
-
show: true,
-
lineStyle: {
-
color: "#fff",
-
width: 1,
-
type: "solid",
-
},
-
},
-
splitLine: {
-
//分割线配置
-
show: false,
-
lineStyle: {
-
color: "#fff",
-
},
-
},
-
nameTextStyle: {
-
//y轴上方单位的颜色
-
color: "#fff",
-
},
-
//设置纵坐标最大值
-
max: this.maxDate2
-
},
-
],
-
series: [
-
{
-
itemStyle: {
-
normal: {
-
// 这里是用一个柱子,从左到右的渐变。也可以用两个柱子做从上往下的渐变,和上面的透明渐变一样用法
-
color: {
-
type: 'linear',
-
x: 1,
-
y: 0,
-
x2: 1,
-
y2: 1,
-
colorStops: [
-
{ offset: 0, color: '#83bff6' },
-
{ offset: 0.5, color: '#188df0' },
-
{ offset: 1, color: 'blue' }
-
]
-
}
-
}
-
},
-
data: this.listData1,
-
type: 'bar',
-
barWidth: 40,
-
tooltip: {
-
valueFormatter: function (value) {
-
return value;
-
}
-
},
-
z: 2,
-
name: this.names[0]
-
},
-
// 底部的光晕
-
{
-
name: this.names[0],
-
type: 'pictorialBar',
-
tooltip: {
-
show: false
-
},
-
symbolSize: [60, 20],
-
symbolOffset: [0, 10],
-
z: 1,
-
itemStyle: {
-
normal: {
-
color: 'transparent',
-
borderColor: '#26B2E8',
-
borderType: 'solid',
-
borderWidth: 2
-
}
-
},
-
data: this.dataBottom
-
},
-
{
-
//底部圆片
-
name: this.names[0],
-
type: 'pictorialBar',
-
symbolSize: [40, 15],
-
symbolOffset: [0, 5],
-
z: 12,
-
itemStyle: {
-
opacity: 1,
-
color: 'blue',
-
borderColor: '#03529A'
-
},
-
data: this.dataBottom
-
},
-
//头部圆片
-
{
-
name: this.names[0], // 头部
-
type: 'pictorialBar',
-
symbolSize: [40, 15],
-
symbolOffset: [0, -7],
-
z: 3,
-
symbolPosition: 'end',
-
itemStyle: {
-
color: '#188df0',
-
opacity: 1
-
},
-
data: this.listData1
-
},
-
{
-
name: this.names[1],
-
type: 'line',
-
z: 12,
-
yAxisIndex: 1,
-
tooltip: {
-
valueFormatter: function (value) {
-
return value;
-
}
-
},
-
lineStyle: {
-
normal: {
-
width: 3 //折线宽度
-
},
-
},
-
itemStyle: {
-
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-
{ offset: 0, color: '#93CE07' },
-
{ offset: 0.2, color: '#FBDB0F' },
-
{ offset: 0.4, color: '#FC7D02' },
-
{ offset: 0.6, color: '#FD0100' },
-
{ offset: 0.8, color: '#AA069F' },
-
{ offset: 1, color: '#AC3B2A' }
-
])
-
},
-
data: this.listData2
-
}
-
]
-
})
-
}
-
}
-
}
-
</script>
六、3D饼图实现
vue中如何使用echarts和echarts-gl实现3D饼图环形饼图_echarts 3d饼图-CSDN博客
七、Echarts:象形柱图实现水塔水位的动画、水球图和液位柱子图
Echarts:象形柱图实现水塔水位的动画、水球图和液位柱子图_echarts html 液位柱子图-CSDN博客
八、3D折线图实现
vue中如何使用echarts和echarts-gl实现三维折线图-CSDN博客
resize.js
-
import { debounce } from '@/utils'
-
export default {
-
data() {
-
return {
-
$_sidebarElm: null,
-
$_resizeHandler: null
-
}
-
},
-
mounted() {
-
this.initListener()
-
},
-
activated() {
-
if (!this.$_resizeHandler) {
-
// avoid duplication init
-
this.initListener()
-
}
-
// when keep-alive chart activated, auto resize
-
this.resize()
-
},
-
beforeDestroy() {
-
this.destroyListener()
-
},
-
deactivated() {
-
this.destroyListener()
-
},
-
methods: {
-
// use $_ for mixins properties
-
// https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
-
$_sidebarResizeHandler(e) {
-
if (e.propertyName === 'width') {
-
this.$_resizeHandler()
-
}
-
},
-
initListener() {
-
this.$_resizeHandler = debounce(() => {
-
this.resize()
-
}, 100)
-
window.addEventListener('resize', this.$_resizeHandler)
-
this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
-
this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
-
},
-
destroyListener() {
-
window.removeEventListener('resize', this.$_resizeHandler)
-
this.$_resizeHandler = null
-
this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
-
},
-
resize() {
-
const { chart } = this
-
chart && chart.resize()
-
}
-
}
-
}
防抖函数
-
/**
-
* @param {Function} fn 防抖函数
-
* @param {Number} delay 延迟时间
-
*/
-
export function debounce(fn, delay) {
-
var timer;
-
return function () {
-
var context = this;
-
var args = arguments;
-
clearTimeout(timer);
-
timer = setTimeout(function () {
-
fn.apply(context, args);
-
}, delay);
-
};
-
}
文章知识点与官方知识档案匹配,可进一步学习相关知识