利用d3画柱状图

这篇博客展示了如何利用D3.js库来绘制一个简单的条形图。代码中定义了数据、设置了SVG画布、定义了x和y轴的比例尺,并通过比例尺绘制了x轴和y轴。此外,还为数据中的每个条形添加了填充颜色,并调整了刻度文本的字体大小。最后,博客添加了一个图表标题。

话不多说,直接上代码

<!DOCTYPE html>
<html lang="en">
<head>
    <title>BarChart</title>
    <script src="https://d3js.org/d3.v7.js"></script>
</head>
<body>
<svg width="1600" height="800" id="mainsvg" class="svgs">
</svg>

<script>
    const data = [{name: 'a', value: 6}, {name: 'b', value: 7}];

    const svg = d3.select('#mainsvg');//主画布

    const width = +svg.attr('width');
    const height = +svg.attr('height');//主画布的宽和高
    const margin = {top: 60, right: 30, bottom: 60, left: 50};//图表部分在主画布周围的留白宽度
    const innerWidth = width - margin.left - margin.right;
    const innerHeight = height - margin.top - margin.bottom;//图表部分的宽和高

    //x和y轴的比例尺,domain是指定响应的取值范围,range是指定实际在屏幕上的显示范围,比例尺是一个函数,可以将domain里特定的某一个值转化为屏幕上实际显示的位置
    const XScale = d3.scaleLinear()
        .domain([0, d3.max(data, d => d.value)])
        .range([0, innerWidth]);
    const YScale = d3.scaleBand()
        .domain(data.map(d => d.name))
        .range([0, innerHeight])
        .padding(0.1);//让每相邻的两个刻度之间有0.1的间距,防止画出来的柱状图连在一起

    const g = svg.append('g').attr('id', 'maingroup').attr('transform', `translate(${margin.left},${margin.top})`);

    const xAxis = d3.axisBottom(XScale);
    g.append('g').call(xAxis).attr('transform', `translate(0, ${innerHeight})`);
    const yAxis = d3.axisLeft(YScale);
    g.append('g').call(yAxis);

    data.forEach(d => {//对数据进行绘制
        g.append('rect')
            .attr('width', XScale(d.value))
            .attr('height', YScale.bandwidth())//比例尺自带的接口,返回每一个刻度的宽度
            .attr('fill', 'black')
            .attr('y', YScale(d.name));
    });

    d3.selectAll('.tick text').attr('font-size', '20');//刻度的字体大小调整
    g.append('text')//加一个图表的标题
        .text('TEST')
        .attr('font-size', '50')
        .attr('transform', `translate(${innerWidth / 2},0)`)
        .attr('text-anchor', 'middle');
</script>
</body>
</html>

效果如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最辣の鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值