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.
336 lines
6.9 KiB
JavaScript
336 lines
6.9 KiB
JavaScript
import { Chart } from "@antv/g2";
|
|
/**
|
|
* 漏斗图
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
export function ldChart (dom, data) {
|
|
let ldChart = new Chart({
|
|
container: dom, //chart容器id
|
|
autoFit: true,
|
|
// width:230,
|
|
// height: 240,
|
|
padding: [10, 60, 15],
|
|
});
|
|
setTimeout(() => {
|
|
ldChart.data(data);
|
|
ldChart.axis(false);
|
|
ldChart.legend(false);
|
|
ldChart.tooltip({
|
|
showTitle: false,
|
|
showMarkers: false,
|
|
itemTpl: '<li style="margin-bottom:4px;list-style-type:none;padding: 0;">' + '<span style="background-color:{color};" class="g2-tooltip-marker"></span>' + "{name}<br/>" + '<span style="padding-left: 16px;line-height: 16px;">浏览人数:{pv}</span><br/>' + "</li>",
|
|
});
|
|
ldChart.interaction("active-region");
|
|
ldChart.coordinate("rect").transpose().scale(1, -1);
|
|
ldChart
|
|
.interval()
|
|
.adjust("symmetric")
|
|
.position("action*pv")
|
|
.shape("funnel")
|
|
.color("action", ["#0050B3", "#1890FF", "#40A9FF", "#69C0FF", "#BAE7FF"])
|
|
.label(
|
|
"action*pv",
|
|
(action, pv) => {
|
|
return {
|
|
content: `${action} ${pv}`,
|
|
};
|
|
},
|
|
{
|
|
offset: 35,
|
|
labelLine: {
|
|
style: {
|
|
lineWidth: 1,
|
|
stroke: "rgba(0, 0, 0, 0.15)",
|
|
},
|
|
},
|
|
}
|
|
)
|
|
.tooltip("action*pv", (action, pv) => {
|
|
return {
|
|
name: action,
|
|
// percent: +percent * 100 + '%',
|
|
pv,
|
|
};
|
|
})
|
|
.animate({
|
|
appear: {
|
|
animation: "fade-in",
|
|
},
|
|
update: {
|
|
annotation: "fade-in",
|
|
},
|
|
});
|
|
ldChart.interaction("element-active");
|
|
ldChart.render();
|
|
return ldChart;
|
|
}, 100);
|
|
}
|
|
/**
|
|
* 环形图
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
export function annulusChart (dom, data) {
|
|
const chart = new Chart({
|
|
container: dom,
|
|
autoFit: true,
|
|
padding: [10, 10, 10],
|
|
});
|
|
chart.data(data);
|
|
chart.scale("percent", {
|
|
formatter: (val) => {
|
|
val = val * 100 + "%";
|
|
return val;
|
|
},
|
|
});
|
|
chart.coordinate("theta", {
|
|
radius: 0.75,
|
|
innerRadius: 0.6,
|
|
});
|
|
chart.tooltip({
|
|
showTitle: false,
|
|
showMarkers: false,
|
|
itemTpl: '<li class="g2-tooltip-list-item"><span style="background-color:{color};" class="g2-tooltip-marker"></span>{name}: {value}</li>',
|
|
});
|
|
chart.legend(false);
|
|
// 辅助文本
|
|
chart
|
|
.annotation()
|
|
.text({
|
|
position: ["50%", "60%"],
|
|
content: "职位总数",
|
|
style: {
|
|
fontSize: 12,
|
|
fill: "#8c8c8c",
|
|
textAlign: "center",
|
|
},
|
|
offsetY: -20,
|
|
})
|
|
.text({
|
|
position: ["51%", "50%"],
|
|
content: "200",
|
|
style: {
|
|
fontSize: 12,
|
|
fill: "#8c8c8c",
|
|
textAlign: "center",
|
|
},
|
|
offsetX: -10,
|
|
offsetY: 20,
|
|
})
|
|
.text({
|
|
position: ["46%", "50%"],
|
|
content: "%",
|
|
style: {
|
|
fontSize: 12,
|
|
fill: "#8c8c8c",
|
|
textAlign: "center",
|
|
},
|
|
offsetY: 20,
|
|
offsetX: 20,
|
|
});
|
|
chart
|
|
.interval()
|
|
.adjust("stack")
|
|
.position("percent")
|
|
.color("item")
|
|
.label("percent", (percent) => {
|
|
return {
|
|
content: (data) => {
|
|
return `${data.item}: ${percent * 100}%`;
|
|
},
|
|
};
|
|
})
|
|
.tooltip("item*percent", (item, percent) => {
|
|
percent = percent * 100 + "%";
|
|
return {
|
|
name: item,
|
|
value: percent,
|
|
};
|
|
});
|
|
|
|
chart.interaction("element-active");
|
|
|
|
chart.render();
|
|
}
|
|
/**
|
|
* 折线图无坐标轴版
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
export function brokenLineChart (dom, data) {
|
|
const chart = new Chart({
|
|
container: dom,
|
|
autoFit: true,
|
|
padding: [10, 10, 10],
|
|
});
|
|
|
|
|
|
|
|
|
|
chart.data(data);
|
|
chart.legend(false);
|
|
chart.axis(false);
|
|
chart.scale({
|
|
month: {
|
|
range: [0, 1],
|
|
},
|
|
temperature: {
|
|
nice: true,
|
|
alias: 'value',
|
|
},
|
|
});
|
|
|
|
// chart.tooltip(false);
|
|
chart.tooltip({
|
|
showCrosshairs: false, // 是否显示十字定位线
|
|
// shared: true,
|
|
showTitle: true,
|
|
showMarkers: false,
|
|
// title: (title, datum) => datum['value'],
|
|
// itemTpl: '{month}{temperature}<li style="margin-bottom:4px;list-style-type:none;padding: 0;">' + '<span style="background-color:{color};" class="g2-tooltip-marker"></span>' + "{month}<br/>" + '<span style="padding-left: 16px;line-height: 16px;">浏览人数:{temperature}</span><br/>' + "</li>",
|
|
});
|
|
|
|
// chart.axis("temperature", {
|
|
// label: {
|
|
// formatter: (val) => {
|
|
// return val + " °C";
|
|
// },
|
|
// },
|
|
// });
|
|
|
|
chart // 设置折线
|
|
.line()
|
|
.position("month*temperature")
|
|
.color("#9C66E5")
|
|
.shape("smooth").animate({
|
|
appear: {
|
|
// 初始入场动画配置
|
|
delay: 0,
|
|
duration: 200
|
|
},
|
|
enter: {
|
|
// 更新时出现动画配置
|
|
delay: 0,
|
|
duration: 200
|
|
},
|
|
leave: {
|
|
// 更新时销毁动画配置
|
|
delay: 0,
|
|
duration: 200
|
|
},
|
|
update: {
|
|
// 更新时改变动画配置
|
|
delay: 0,
|
|
duration: 200
|
|
}
|
|
});
|
|
|
|
chart.area().position("month*temperature").shape("smooth").color("l(270) 0:#ffffff 0.6:#9C66E5 0.8:#9C66E5 1 :#bb7ff3").animate({
|
|
appear: {
|
|
// 初始入场动画配置
|
|
delay: 0,
|
|
duration: 200
|
|
},
|
|
enter: {
|
|
// 更新时出现动画配置
|
|
delay: 0,
|
|
duration: 200
|
|
},
|
|
leave: {
|
|
// 更新时销毁动画配置
|
|
delay: 0,
|
|
duration: 200
|
|
},
|
|
update: {
|
|
// 更新时改变动画配置
|
|
delay: 0,
|
|
duration: 200
|
|
}
|
|
}); // 设置色块区域
|
|
|
|
// chart // 设置折线节点
|
|
// .point()
|
|
// .position('month*temperature')
|
|
// .color('city')
|
|
// .shape('circle');
|
|
|
|
chart.render();
|
|
return chart;
|
|
}
|
|
/**
|
|
* 柱状图
|
|
*
|
|
*
|
|
*/
|
|
export function histogramChart (dom, data) {
|
|
const chart = new Chart({
|
|
container: dom,
|
|
autoFit: true,
|
|
padding: [10, 30, 20],
|
|
});
|
|
|
|
chart.data(data);
|
|
chart.scale("sales", {
|
|
nice: true,
|
|
});
|
|
|
|
chart.tooltip({
|
|
showMarkers: false,
|
|
});
|
|
chart.interaction("active-region");
|
|
|
|
chart.interval().position("year*sales");
|
|
|
|
chart.render();
|
|
}
|
|
/**
|
|
* 折线图有坐标轴版
|
|
*
|
|
*
|
|
*/
|
|
export function brokenLineChartWithAxis (dom, data, linecolor) {
|
|
const chart = new Chart({
|
|
container: dom,
|
|
autoFit: true,
|
|
padding: [30, 30, 30, 30],
|
|
});
|
|
|
|
chart.data(data);
|
|
chart.legend(false);
|
|
chart.scale({
|
|
month: {
|
|
range: [0, 1],
|
|
},
|
|
temperature: {
|
|
nice: true,
|
|
},
|
|
});
|
|
|
|
chart.tooltip({
|
|
showCrosshairs: true,
|
|
shared: true,
|
|
});
|
|
|
|
chart.axis("temperature", {
|
|
label: {
|
|
formatter: (val) => {
|
|
return val;
|
|
},
|
|
},
|
|
});
|
|
|
|
chart.area().position("month*temperature").color(`l(270) 0:#ffffff 0.5:${linecolor} `).shape("smooth");
|
|
chart.line().position("month*temperature").color(`${linecolor}`).shape("smooth");
|
|
|
|
chart.point().position("month*temperature").color(`${linecolor}`).shape("circle");
|
|
|
|
chart.render();
|
|
|
|
return chart;
|
|
}
|