D3(v5) in TypeScript 坐标轴之 饼状图生成

Posted kbaoq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D3(v5) in TypeScript 坐标轴之 饼状图生成相关的知识,希望对你有一定的参考价值。

饼状图生成时依旧遇到了类型问题,记录如下:

import * as d3 from ‘d3‘;
import * as React from ‘react‘;

class TestGraph extends React.Component {
    public componentDidMount() {
        const marge = {
            top: 60,
            bottom: 60,
            left: 60,
            right: 60
        };
        const dataSet: any[] = [10, 23, 13, 40, 27, 35, 20];
        const svg = d3.select("svg");
        const g = svg.append("g")
            .attr("transform", `translate(${marge.top},${marge.left})`);
        const width: any = svg.attr(‘width‘);
        const height: any = svg.attr(‘height‘);
        // 此处必须把.domain里的参数转为字符串数组,不然会报类型错误
        const colorScale: any = d3.scaleOrdinal()// 此处必须把colorScale类型设置为any,不然会在使用时报类型错误
            .domain(d3.range(dataSet.length).map(value => {
                return value.toString();
            }))
            .range(d3.schemeCategory10);

        const pie = d3.pie();
        const ir = 0;
        const or = 100;
        const arcG: any = d3.arc()// 此处原理如上
            .innerRadius(ir)
            .outerRadius(or);
        const pirData = pie(dataSet);


        const gs = g.selectAll(".g")
            .data(pirData)
            .enter()
            .append("g")
            .attr("transform", `translate(${width / 2},${height / 2})`);

        gs.append("path")
            .attr(‘d‘, (d) => {// 此处为报错地方,需在上面设置arcG类型为any
                return arcG(d);
            })
            .attr(‘fill‘, (datum, index) => {// 同上
                return colorScale(index);
            });

        gs.append("text")
            .attr("transform", d => {// 位置设在中心处
                return "translate(" + arcG.centroid(d) + ")";
            })
            .attr("text-anchor", "middle")
            .text(d => {// 此处需要转换返回值为string
                return d.data.toString();
            })
    }

    public render() {
        return (
            <svg width={960} height={600}/>
        )
    }
}

export default TestGraph;

最终效果如下:

技术分享图片

以上是关于D3(v5) in TypeScript 坐标轴之 饼状图生成的主要内容,如果未能解决你的问题,请参考以下文章

d3.js(v5.7)的比例尺以及坐标轴

D3.js的v5版本入门教程(第九章)——完整的柱状图

d3.js(v5.7)完整地画一个柱状图

D3 变焦 v3 与 v5

将 d3 js 代码从 v5.16 重构到 v6.6.2,d3.event 重大更改

如何在 D3 v5 中从 CSV 文件加载数据