reactjs - 如何使用 d3 和 reactjs 在饼图中显示标签
问题描述
我是 reactjs 和 d3js 的新手,并试图在 reactjs 网站中使用 d3 创建饼图。我想创建一个饼图,将饼图中的标签显示为工具提示,以及一个指向切片的箭头及其对应的标签,就像这个例子一样。
我创建了一个代码框来进一步演示我现在卡在哪里。如您所见,切片中显示了值,但我也想要标签,就像上面的示例一样。如果有人可以帮我解决这个问题,我将不胜感激。
这是我到目前为止创建的代码。
import React, { useEffect, useRef } from "react";
import * as d3 from "d3";
const Pie = props => {
const ref = useRef(null);
const createPie = d3
.pie()
.value(d => d.value)
.sort(null);
const createArc = d3
.arc()
.innerRadius(props.innerRadius)
.outerRadius(props.outerRadius);
const colors = d3.scaleOrdinal(d3.schemeCategory10);
const format = d3.format(".2f");
useEffect(() => {
const data = createPie(props.data);
const group = d3.select(ref.current);
const groupWithData = group.selectAll("g.arc").data(data);
groupWithData.exit().remove();
const groupWithUpdate = groupWithData
.enter()
.append("g")
.attr("class", "arc");
const path = groupWithUpdate
.append("path")
.merge(groupWithData.select("path.arc"));
path
.attr("class", "arc")
.attr("d", createArc)
.attr("fill", (d, i) => colors(i));
const text = groupWithUpdate
.append("text")
.merge(groupWithData.select("text"));
text
.attr("text-anchor", "middle")
.attr("alignment-baseline", "middle")
.attr("transform", d => `translate(${createArc.centroid(d)})`)
.style("fill", "white")
.style("font-size", 10)
.text(d => format(d.value));
}, [props.data]);
return (
<svg width={props.width} height={props.height}>
<g
ref={ref}
transform={`translate(${props.outerRadius} ${props.outerRadius})`}
/>
</svg>
);
};
export default Pie;
解决方案
推荐阅读
- git - 配置 gccemacs 和 emacs - 我需要两个本地 git repos 来完成这个吗?
- glsl - 片段着色器的输出结构?
- sql - 句号错误应该在别名和句号之间?
- arrays - Excel空白单元格引用在其旁边添加单元格两次
- string - 字母表的排列最小化子序列的数量来构造一个字符串
- java - 每次我更改数据时都会通知垃圾邮件
- aws-lambda - AWSLambdaInternal 上传的文件必须是非空 zip InvalidParameterValueException
- python - 如何在 Tkinter 笔记本选项卡上添加悬停效果?
- python - Python Selenium 意外搜索元素外
- java - 为什么列表列表不能添加动物?