react项目加d3.js

在react项目中加入svg图表,使用d3.js

在项目中加入d3:在终端中输入命令cnpm || npm install d3 --save

在组件中加入图表,代码如下:

import React, { Component } from 'react';
import * as d3 from 'd3';


class BarGraph extends Component {

render() {

/*添加一个svg画布*/
var width = 900; //画布的宽度
var height = 600; //画布的高度
var svg = d3.select("#theChart") //选择文档中的body元素
.append("svg") //添加一个svg元素
.attr("width", width) //设定宽度
.attr("height", height);

var marge = {top:60,bottom:60,left:60,right:60}
var g = svg.append("g")
.attr("transform","translate("+marge.top+","+marge.left+")");
/*数据集*/
var dataset = [10,20,30,23,13,40,27,35,20];

/*在x/y轴方向绘制坐标轴*/
var xScale = d3.scaleBand()
.domain(d3.range(dataset.length))
.rangeRound([0,width-marge.left-marge.right]);
var xAxis = d3.axisBottom(xScale);
g.append("g")
.attr("transform","translate("+0+","+(height-marge.top-marge.bottom)+")")
.call(xAxis);
var yScale = d3.scaleLinear()
.domain([0,d3.max(dataset)])
.range([height-marge.top-marge.bottom,0]);
var yAxis = d3.axisLeft(yScale);
g.append("g")
.attr("transform","translate(0,0)")
.call(yAxis);
/*为每个矩形和对应的文字创建一个分组<g>*/
var gs = g.selectAll(".rect")
.data(dataset)
.enter()
.append("g");

/*绘制矩形 左上角坐标x、y和长宽*/
var rectPadding = 20;//矩形之间的间隙
gs.append("rect")
.attr("x",function(d,i){
return xScale(i)+rectPadding/2;
})
.attr("y",function(d){ /*改变*/
var min=yScale.domain()[0];
return yScale(min);
})
.attr("width",function(){
return xScale.step()-rectPadding;
})
.attr("height",function(d){
return 0;
})
.attr("fill","blue")
.transition()
.duration(2000)
.delay(function(d,i){
return i*400;
})
/*.ease(d3.easeElasticInOut) */
.attr("y",function(d){ /*回到最终状态*/
return yScale(d);
})
.attr("height",function(d){
return height-marge.top-marge.bottom-yScale(d);
});
/*绘制文字给文字添加动态效果*/
gs.append("text")
.attr("x",function(d,i){
return xScale(i)+rectPadding/2;
})
.attr("y",function(d){/*改变的部分*/
var min=yScale.domain()[0];
return yScale(min);
})
.attr("dx",function(){
return (xScale.step()-rectPadding)/2-10;
})
.attr("dy",0)
.text(function(d){
return d;
})
.transition()
.duration(2000)
.delay(function(d,i){
return i*400;
})
/* .ease(d3.easeElasticInOut)*/
.attr("y",function(d){
return yScale(d);
});

return (
<div id="theChart"></div>
);
}
}

export default BarGraph;

 

posted @   枫若  阅读(391)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示