const myShape = {
x: 0,
y: 0,
width: 13 //间距
};
// 绘制左侧面
const InclinedRoofBar = echarts.graphic.extendShape({
shape: myShape,
buildPath: function (ctx, shape) {
// canvas,shape是从custom传入的
const xAxisPoint = shape.xAxisPoint;
const c0 = [shape.x, shape.y];
const c1 = [shape.x - 17, shape.y - 10];
const c2 = [xAxisPoint[0] - 17, xAxisPoint[1]];
const c3 = [xAxisPoint[0], xAxisPoint[1]];
ctx
.moveTo(c0[0], c0[1])
.lineTo(c1[0], c1[1])
.lineTo(c2[0], c2[1])
.lineTo(c3[0], c3[1])
.closePath();
}
});
echarts.graphic.registerShape('InclinedRoofBar', InclinedRoofBar);
option = {
backgroundColor: '#1e3756',
color: ['#b27e44'],
tooltip: {
show: true,
trigger: 'axis',
axisPointer: {
type: 'shadow'
},
confine: true,
textStyle: {
fontSize: 14
},
formatter: (params) => {
var tar = params[0];
this.workType = tar.name;
return tar.name + ' : ' + '<br/>' + tar.value;
}
},
legend: {
top: 5,
itemWidth: 16,
itemHeight: 8,
left: 'center',
padding: 0,
textStyle: {
color: '#fff',
fontSize: 14,
padding: [2, 0, 0, 0]
},
data: ['demo1122']
},
grid: {
containLabel: true,
left: 0,
bottom: 0,
width: '100%',
height: '85%'
},
xAxis: {
type: 'category',
axisLine: {
show: true,
lineStyle: {
width: 1,
color: 'rgb(255, 255, 255, 0.5)'
}
},
axisLabel: {
show: true,
interval: 0,
rotate: 30,
textStyle: {
color: '#fff',
fontSize: 12
}
},
splitLine: {
show: false,
lineStyle: {
color: 'rgb(255, 255, 255, 0.3)',
type: 'dashed',
width: 1
}
},
axisTick: {
show: false
},
data: [],
zlevel: 10
},
yAxis: {
type: 'value',
name: '',
min: 0,
axisTick: {
show: false
},
axisLabel: {
textStyle: {
color: '#fff',
fontSize: 12
}
},
splitLine: {
show: true,
lineStyle: {
color: 'rgb(255, 255, 255, 0.3)',
type: 'dashed',
width: 0.7
}
},
axisLine: {
show: false,
lineStyle: {
color: 'rgb(52, 113, 250)'
}
},
nameTextStyle: {
color: '#fff',
fontSize: 16
}
},
series: [
{
type: 'custom',
name: 'demo1122',
itemStyle: {
borderColor: '#b27e44',
borderWidth: 1,
color: '#b27e44',
normal: {
borderWidth: 1
}
},
renderItem: (params, api) => {
const location = api.coord([api.value(0), api.value(1)]);
const xlocation = api.coord([api.value(0), 0]);
return {
type: 'InclinedRoofBar',
shape: {
api,
xValue: api.value(0),
yValue: api.value(1),
x: location[0] + 10,
y: location[1],
xAxisPoint: [xlocation[0] + 10, xlocation[1]]
},
style: {
fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#FFA042'
},
{
offset: 1,
color: 'rgba(0,0,0,0)'
}
]),
stroke: '#b27e44'
}
};
},
data: []
},
{
type: 'bar',
label: {
normal: {
show: true,
position: 'top',
color: '#ff0000',
fontSize: 20,
offset: [4, -10],
formatter: function (params) {
if (params.value > 0) {
return params.value;
} else {
return '';
}
}
}
},
barWidth: 14,
itemStyle: {
color: 'transparent'
},
tooltip: {
show: true
},
data: [29, 80, 34, 27, 55]
}
]
};
const { xAxis, series } = option;
seriesData = [
{
workmode: 'text1',
censusCount: 29
},
{
workmode: 'text2',
censusCount: 80
},
{
workmode: 'text3',
censusCount: 34
},
{
workmode: 'text4',
censusCount: 27
},
{
workmode: 'text5',
censusCount: 55
}
];
xAxis.data = seriesData.map((item) => item.workmode);
series[0].data = seriesData.map((item) => item.censusCount);
在线链接: