You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

293 lines
5.1 KiB
Vue

<script setup lang="ts">
import * as echarts from "echarts";
function generateData(totalNum, bigvalue, smallvalue, color) {
let dataArr = [];
for (var i = 0; i < totalNum; i++) {
if (i % 2 === 0) {
dataArr.push({
name: (i + 1).toString(),
value: bigvalue,
itemStyle: {
color: color,
borderWidth: 0,
},
});
} else {
dataArr.push({
name: (i + 1).toString(),
value: smallvalue,
itemStyle: {
color: "rgba(0,0,0,0)",
borderWidth: 0,
},
});
}
}
return dataArr;
}
function initChart() {
const chartDom = document.getElementById("diggerHourlyDistanceChart");
const mainChart = echarts.init(chartDom);
let data1 = [
{
name: "05:00",
value: 175,
},
{
name: "06:00",
value: 148,
},
{
name: "07:00",
value: 95,
},
{
name: "08:00",
value: 175,
},
{
name: "09:00",
value: 148,
},
{
name: "10:00",
value: 95,
},
{
name: "11:00",
value: 56,
},
{
name: "12:00",
value: 45,
},
{
name: "13:00",
value: 34,
},
{
name: "14:00",
value: 123,
},
{
name: "15:00",
value: 175,
},
{
name: "16:00",
value: 148,
},
{
name: "17:00",
value: 95,
},
{
name: "18:00",
value: 123,
},
{
name: "19:00",
value: 175,
},
{
name: "20:00",
value: 148,
},
{
name: "21:00",
value: 95,
},
{
name: "22:00",
value: 148,
},
{
name: "23:00",
value: 95,
},
];
let xAxisData = [];
let seriesData1 = [];
data1.forEach((item) => {
xAxisData.push(item.name);
seriesData1.push(item.value);
});
const yList = [80, 100, 100, 100];
const xList = ["寿命≤100", "100<寿命≤200", "200<寿命≤300", "寿命>300"];
const color = ["#00FEEE", "#2fd28d", "#c4742d", "#c42d2d"];
const xData = xList.map((item, index) => {
return {
value: item,
textStyle: {
color: color[index],
},
};
});
const dom = 200;
const barWidth = dom / 10;
const colors = [
{
type: "linear",
x: 1,
x2: 1,
y: 0,
y2: 1,
colorStops: [
{
offset: 1,
color: "rgba(216,216,216,0)",
},
{
offset: 0.5,
color: "rgba(103,236,228,0.53)",
},
{
offset: 0,
color: "#00FEEE",
},
],
},
];
const colors1 = [
{
type: "linear",
x: 0,
x2: 0,
y: 1,
y2: 0,
colorStops: [
{
offset: 0.3,
color: "#4bcde4",
},
{
offset: 1,
color: "#4b88e4",
},
],
},
];
const option = {
backgroundColor: "transparent",
//X轴
xAxis: {
name: "X",
nameTextStyle: {
color: "#FFFFFF",
padding: [0, 0, 0, 50],
},
data: xAxisData,
show: true,
type: "category",
axisLine: {
show: false,
},
axisTick: {
show: false,
},
splitLine: {
show: false,
},
axisLabel: {
color: "#B4C0CC",
},
},
yAxis: {
type: "value",
axisLine: {
show: false,
},
axisTick: {
show: false,
},
splitLine: {
lineStyle: {
color: "#35414D",
type: "dashed",
},
},
axisLabel: {
color: "#B4C0CC",
},
},
/**区域位置*/
grid: {
// Adjust grid for spacing
left: "1%",
right: "1%",
bottom: "5%",
top: "15%",
containLabel: true,
},
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow",
},
},
series: [
{
type: "bar",
barWidth: barWidth,
symbolOffset: ["10%", "50%"],
itemStyle: {
color: function (params) {
return colors[0];
},
},
data: seriesData1,
tooltip: {
show: false,
},
},
{
// 实体柱状图底部
z: 4,
type: "pictorialBar",
data: seriesData1,
symbolOffset: ["0%", "0%"],
symbolSize: [barWidth, barWidth * 0.3],
itemStyle: {
color: function (params) {
return "rgba(0,255,252,0.1)";
},
},
tooltip: {
show: false,
},
},
{
// 实体柱状图顶部
z: 3,
type: "pictorialBar",
symbolPosition: "end",
data: seriesData1,
symbolOffset: ["0%", "-50%"],
symbolSize: [barWidth, barWidth * 0.3],
itemStyle: {
borderWidth: 0,
color: function (params) {
return colors1[0];
},
},
},
],
};
mainChart.setOption(option);
}
onMounted(() => {
initChart();
});
</script>
<template>
<div id="diggerHourlyDistanceChart" style="width: 100%; height: 100%"></div>
</template>