d3.js绘制饼状图,悬浮出现字以及点击事件
创始人
2024-05-31 09:58:57
0

代码以及注释如下:

const width = 300; // 定义圆的宽度
const height = 300; // 定义圆的高度
const radius = Math.min(width, height) / 2; // 算出半径

const color = d3.scaleOrdinal()
    .range(["#98abc5", "#8a89a6", "#6b486b", "#a05d56", "#d0743c"]); // 配置颜色

const arc = d3.arc()
    .outerRadius(radius - 10) // 外圆半径
    .innerRadius(0)
; // 内圆半径,如果为零则为实心圆

const pie = d3.pie() // 定义饼图
    .sort(null)
    .value(d => d.population); // 通过以下data数据中的population来分配饼图所占空间

const svg = d3.select("#gb08fe") // 添加一个svg图
    .append("svg")
    .attr("width", width)
    .attr("height", height)
    .append("g")
    .attr("transform", `translate(${width / 2}, ${height / 2})`);

const data = [{ // 创建数据
        age: "<5",
        population: 2704659
    },
    {
        age: "5-13",
        population: 4499890
    },
    {
        age: "14-17",
        population: 2159981
    },
    {
        age: "18-24",
        population: 3853788
    },
    {
        age: "25-44",
        population: 14106543
    },
    {
        age: "45-64",
        population: 8819342
    },
];

const g = svg.selectAll(".arc") // 选择或创建类名为arc的元素
    .data(pie(data)) // 调用饼图并添加数据绑定
    .enter().append("g") // 筛入到元素中并添加g标签
    .attr("class", "arc"); // 设置样式名称为arc
// 这里的g则表示每一个标签g元素
g.append("path") // 添加path来绘制饼图
    .attr("d", arc) // 绘制路径d,路径为src
    .style("fill", d => color(d.data.age)); // 路径d的填充色

g.append("text") // 添加文本
    .attr("transform", d => `translate(${arc.centroid(d)})`)
    .attr("dy", ".35em")
    .text(d => d.data.age);


const tooltip = d3.select("#gb08fe")
    .append('div')
    .attr('class', 'tooltip');

// 注意:这里是g不是svg否则后续监听之后的d的值会获取不到。因为以上g.data()才是将数据绑定到元素中
g.on('mouseenter', (event,d) => { // 这里的d.data才是数组里的每条数据
        tooltip
            .style('opacity', 1)
            .html(`
          ${d.data.age}: ${d.data.population}
        `)
    })
    .on('mousemove', (event, d) => {
        tooltip
            .style('left', `${event.pageX + 20}px`)
               .style('top', `${event.pageY}px`)
            .style('position', 'absolute');
      
    })
    .on('mouseleave', () => {
        tooltip
            .style('opacity', 0);
    });
g.on('click',(event,d)=>{ // 添加点击事件
  alert(d.data.age)
})

 


 

相关内容

热门资讯

怎么在安卓系统装windows... 你是不是也和我一样,对安卓手机的强大性能爱不释手,但又时不时地想念Windows系统的熟悉界面和那些...
kindle安卓系统壁纸设置,... 亲爱的Kindle用户,你是否曾为你的Kindle设备挑选过一款心仪的壁纸呢?今天,就让我带你一起探...
一加降级安卓系统,回顾与展望 你有没有想过,你的手机系统升级后,竟然还能降级回旧版本?这听起来是不是有点像穿越时空的魔法?没错,今...
凤凰安卓电视系统安装,畅享智能... 亲爱的读者们,你是否也像我一样,对凤凰安卓电视系统安装充满了好奇?想象一台普通的电视,通过安装这个系...
如何更换安卓系统手机,安卓系统... 你有没有想过,你的安卓手机用久了,是不是有点儿卡顿了呢?别急,今天就来教你怎么给它换换“血”,让它焕...
国家粮油统计安卓系统,智能数据... 你有没有想过,每天我们吃的粮食,背后竟然有这么多的故事和数据呢?没错,今天就要带你走进国家粮油统计的...
台电双系统安卓更新,畅享双平台... 你知道吗?最近台电的双系统安卓更新可是引起了不小的轰动呢!作为一个紧跟科技潮流的数码爱好者,我可是迫...
安卓系统上打开caj,Andr... 你有没有遇到过这种情况:手里拿着一本看起来超级有料的电子书,打开一看,哎呀妈呀,竟然是CAJ格式!别...
装安卓手机系统教程,安卓手机系... 你有没有想过,让你的安卓手机也能装上Windows系统,体验一下不一样的操作界面呢?没错,今天就要来...
安卓系统不供应华为,安卓系统不... 你知道吗?最近有个大新闻在科技圈里炸开了锅,那就是安卓系统不再供应华为了!这可不仅仅是两个公司之间的...
安卓哪个系统功耗小些,揭秘哪个... 你有没有发现,手机用着用着,电池就有点不给力了?尤其是安卓手机,系统更新换代快,但功耗问题却一直让人...
免费升级安卓系统吗,畅享智能新... 亲爱的读者们,你是否也像我一样,对安卓系统的免费升级充满了好奇和期待呢?想象你的手机从老旧的系统升级...
运行安卓app的系统,系统版本... 你有没有想过,你的手机里那些运行得风生水起的安卓应用,它们究竟是在什么样的系统下翩翩起舞的呢?今天,...
安卓系统保存照片,安卓系统照片... 手机里的照片是不是越来越多,你有没有想过,这些珍贵的回忆是怎么被安卓系统保存下来的呢?今天,就让我带...
手机安卓系统会卡吗,安卓手机系... 你有没有发现,手机用久了,尤其是安卓系统,有时候会变得有点“慢吞吞”的?这不,今天就来聊聊这个话题,...
安卓系统自己安装mim,And... 你有没有发现,你的安卓手机最近有点儿“聪明”了呢?它竟然自己动手安装了MIM(Mirroring)应...
iwork10安卓系统,创新办... 你有没有发现,最近你的手机是不是变得越来越卡了?别急,别急,让我来给你介绍一款神器——iWork10...
安卓手机装deepin系统,安... 你有没有想过给你的安卓手机换换口味呢?别再局限于那些千篇一律的操作系统了,今天就来给你揭秘如何让你的...
安卓系统不收钱吗,安卓系统免费... 你有没有想过,为什么安卓系统不用你掏腰包呢?是不是觉得它就像那免费的午餐,来者不拒,享用起来毫无负担...
8848系统是安卓的,安卓生态... 你知道吗?在手机操作系统的大千世界里,有一个特别的存在,那就是8848系统。它可不是什么小角色,而是...