[D3] Creating a D3 Force Layout in React
Learn how to leverage d3's layout module to create a Force Layout inside of React. We'll take a look at React's lifecycle methods, using them to bootstrap d3's force layout in order to render our visualization.
import React, {
Component
} from 'react';
import * as d3 from 'd3';
const data = {
"nodes": [
{"id": "Myriel", "group": },
...
{"id": "Mme.Hucheloup", "group": }
],
"links": [
{"source": "Napoleon", "target": "Myriel", "value": },
...
{"source": "Mme.Hucheloup", "target": "Enjolras", "value": }
]
}
export default class ForceLayoutIntro extends Component {
componentDidMount() {
const {
width,
height
} = this.props;
const color = d3.scaleOrdinal(d3.schemeCategory20);
const linkColor = d3.rgb('#c3c3c3');
function ticked (d) {
link
.attr("x1", (d) => d.source.x)
.attr("y1", (d) => d.source.y)
.attr("x2", (d) => d.target.x)
.attr("y2", (d) => d.target.y);
nodes
.attr('cx', d => d.x)
.attr('cy', d => d.y)
}
const simulation = d3.forceSimulation()
.force("link", d3.forceLink().id(function (d) {
return d.id;
}))
.force("charge", d3.forceManyBody())
.force("center", d3.forceCenter(width / , height / ));
const svg = d3.select(this.refs.mountPoint)
.append('svg')
.attr('height', height)
.attr('width', width);
const link = svg
.append('g')
.attr('class', 'links')
.selectAll('links')
.data(data.links)
.enter().append('line')
.attr('stroke', linkColor.brighter(0.5))
.attr('stroke-width', d => Math.sqrt(d.value))
const nodes = svg
.append('g')
.attr('class', 'nodes')
.selectAll('circle')
.data(data.nodes)
.enter().append('circle')
.attr('r', )
.attr('fill', (d) => color(d.group))
.call(d3.drag()
.on("start", dragstarted)
.on("drag", dragged)
.on("end", dragended));
simulation
.nodes(data.nodes)
.on('tick', ticked);
simulation.force("link")
.links(data.links);
function dragstarted(d) {
if (!d3.event.active) simulation.alphaTarget(0.3).restart();
d.fx = d.x;
d.fy = d.y;
}
function dragged(d) {
d.fx = d3.event.x;
d.fy = d3.event.y;
}
function dragended(d) {
if (!d3.event.active) simulation.alphaTarget();
d.fx = null;
d.fy = null;
}
}
// In render, we just need to create the container graph
// The only important thing is we need to set ref
// So that we can access the container in componentDidMount lifeCycle
render() {
const {
width,
height
} = this.props;
const style = {
width,
height,
margin: '10px auto',
border: '1px solid #323232',
};
return (
<div style = {style} ref = "mountPoint"></div>
);
}
}
[D3] Creating a D3 Force Layout in React的更多相关文章
- Creating a Custom Page Layout in SharePoint 2013
Creating a Custom Page Layout in SharePoint 2013 In my last article, I documented how to create a Ma ...
- D3笔记01——D3简介与安装
1 D3简介 发布于2011年,全称Data-Driven Documents,直译为“数据驱动的文档”. 简单概括为一句话:D3是一个Javascript的函数库,是用来做数据可视化的.文档指DOM ...
- A better way to learn D3 js - iLearning D3.js
iLearning D3.js Basic is an iPad app to learn and code with D3. In 1.1 version, new tutorial is prov ...
- [D3] 13. Cleaner D3 code with selection.call()
selection.call() method in D3 can aid in code organization and flexibility by eliminating the need t ...
- [D3] 11. Basic D3 chart interactivity on(), select(this), classed(class, trueorfalse)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Creating Isomorphic Apps with Node.js, React, and Express
In this article, we’re going to use following software: React: the UI framework that can rendered on ...
- 初探React与D3的结合-或许是visualization的新突破?
自诞生之初截止目前(2016年初),React可以说是前端界最流行的话题,如果你还不知道React是何物,你就该需要充充电了. d3是由纽约时报工程师开源的一个绘制基于svg的数据可视化工具,是近几年 ...
- D3.js(v3)+react框架 基础部分之数据绑定及其工作过程与绑定顺序
数据绑定: 将数据绑定到Dom上,是D3最大的特色.d3.select和d3.selectAll返回的元素的选择集.选择集上是没有数据的. 数据绑定就是使被选择元素里“含有”数据. 相关函数有两个: ...
- D3.js (v3)+react框架 基础部分之认识选择集和如何绘制一个矢量图
首先需要下载安装d3.js : yarn add d3 然后在组建中引入 : import * as d3 from 'd3' 然后定义一个方法,在componentDidMount()这个钩子 ...
随机推荐
- Python——Pygame实现生命游戏(game of life)
模块:pygame import pygame,sys,time,random from pygame.locals import * """Color"&qu ...
- MongoDB(六)java操作mongodb增删改查
java操作mysql数据库的代码我们已经了如指掌了.增删改查,java对mongodb数据库也是类似的操作,先是数据库连接.再是进行操作. 首先我们进入进入admin数据库.然后建立自己的数据库te ...
- php输出杨辉三角
php输出杨辉三角 一.截图 二.代码 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- #学习笔记#——JavaScript 数组部分编程(四)
7.合并数组 arr1 和数组 arr2.不要直接修改数组 arr,结果返回新的数组 function concat(arr1, arr2) { return arr1.concat(arr2); } ...
- javaweb一
JavaWeb就是在服务器端以Java语言为解释运行基础的web程序. php代码要想在服务器端运行,需要在服务器软件(通常是Apache)上加php的解释器,Java也一样,但是这个解释器是Tomc ...
- 搭建 Docker 环境
- 搭建Disuz论坛社区
认证:http://.qcloud.com/event/try 网站的性能容量规划通用网站架构:CVM+CDB,可选CDN+Redis+COS http://www.8n8k.com/first-we ...
- hash_set和hash_map
1.hash_set集合容器 hash_set利用链式哈希表,进行数据的插入.删除和搜索.与set容器同样,不同意插入反复键值的元素.SGIC++哈希表是一个链式的结构,由表头和一系列单链组成.表头是 ...
- Irrlicht 3D Engine 笔记系列 之 教程5- User Interface
作者:i_dovelemon 日期:2014 / 12 / 18 来源:CSDN 主题:GUI 引言 今天.博主学习了第五个教程. 这个教程解说了怎样使用Irrlicht内置的一个基础模块.GUI模块 ...
- UITouch 的使用
直接上代码: touch 的四大状态.: // // TouchView.m // UI_practice_04 // // Created by lanouhn on 15/4/22. // Cop ...