Appearance
d3词云
提示 非组件,请安装相应依赖后,直接复制粘贴代码并调整修改部分代码使用
源代码
vue
<template>
<div id="container"></div>
</template>
<script setup lang="ts">
import { onMounted } from "vue";
onMounted(() => {
let words = [];
for (let i = 1; i <= 100; i++) {
words.push({ text: i, size: 50 });
}
let layout = d3.layout
.cloud()
.size([500, 500])
.words(words)
.padding(2)
.rotate(function () {
return ~~(Math.random() * 2) * -90;
})
.font("Impact")
.fontSize(function (d: any) {
return d.size;
})
.on("end", draw);
function draw(words: []) {
d3.select("#container")
.append("svg")
.attr("width", layout.size()[0])
.attr("height", layout.size()[1])
.append("g")
.attr(
"transform",
"translate(" + layout.size()[0] / 2 + "," + layout.size()[1] / 2 + ")",
)
.selectAll("text")
.data(words)
.enter()
.append("text")
.style("font-size", function (d: any) {
return d.size + "px";
})
.style("font-family", "Impact")
.style("fill", function (d: any) {
return d.color;
})
.attr("text-anchor", "middle")
.attr("transform", function (d: any) {
return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")";
})
.text(function (d: any) {
return d.text;
});
}
// 绘制词云
layout.start();
});
</script>
<style scoped></style>