v3版本:

var color = d3.scale.category10();
...
return color[i];

v4/v5版本:

d3.schemeCategory10
d3.schemeCategory20
d3.schemeCategory20b
d3.schemeCategory20c

注意: v5版本只有 d3.schemeCategory10 可用, 其他几个已经被 d3-scale-chromatic 取代了, 在v5版本中使用后面几个都会报错!

// 颜色比例尺
var color = d3.scaleOrdinal().domain(d3.range(nodes.length)) // 节点的个数.range(d3.schemeCategory10);
...
return color(i);

d3-scale-chromatic

d3-scale-chromatic 为 d3 提供了一种新的颜色方案. 描述d3-scale-chromatic的原文如下:

This module provides sequential, diverging and categorical color schemes designed to work with d3-scale’s d3.scaleOrdinal and d3.scaleSequential. Most of these schemes are derived from Cynthia A. Brewer’s ColorBrewer. Since ColorBrewer publishes only discrete color schemes, the sequential and diverging scales are interpolated using uniform B-splines.

大意是说: d3-scale-chromatic 可以提供 连续的 (sequential), 离散的(diverging) and 分类的(categorical) 的颜色方案 (GitHub上还提到了一种 循环的(Cyclical))

这几种方案在GitHub上都给了很多样例, 更加详细的可以查看: d3-scale-chromatic

分类的颜色方案 Categorical

使用方法 (以 d3.schemeSet3 为例):

var colorScale = d3.scaleOrdinal(d3.schemeSet3)//draw nodes 绘制节点
nodes_g.append("circle").attr("r", function (e) {return e.relation_num * 5}).attr("fill", function(d,i){return colorScale(i)});



离散的颜色方案 Diverging

括号中的 k 指的是希望生成的色系个数.

eg. 使用PiYG配色方案创建一个发散的、连续的色度:

var piyg = d3.scaleSequential(d3.interpolatePiYG);

用法一

在设置颜色比例尺的时候就把设置几个色系规定好: d3.schemePRGn[nodes.length] (nodes.length是节点个数)

var colorScale = d3.scaleOrdinal(d3.schemePRGn[nodes.length]);//draw nodes 绘制节点
nodes_g.append("circle").attr("r", function (e) {return e.relation_num * 5}).attr("fill", function(d,i){return colorScale(i)});

用法二

按照官网的要求使用两个函数:

  • d3.interpolatePRGn(t)
  • d3.schemePRGn[k]

其中 k 用于设置希望生成的色系个数(也可以不设置),
t 是[0,1]之间的数字,返回以RGB字符串表示的“BrBG”发散配色方案中相应的颜色。

// 设置色系
var colorScale = d3.scaleOrdinal(d3.schemePRGn)
// 设置一个线性比例尺将节点个数映射到[0,1]中
let scale = d3.scaleLinear().domain([0, nodes.length]).range([0,1])//draw nodes 绘制节点
nodes_g.append("circle").attr("r", function (e) {return e.relation_num * 5}).attr("fill", function(d,i){return d3.interpolatePRGn(scale(i))});

其他色系:

连续颜色方案 Sequential (Single Hue)

eg. 使用蓝色色系创建一个连续的离散9色尺度:

var blues = d3.scaleOrdinal(d3.schemeBlues[9]);

连续颜色方案 Sequential (Multi-Hue)

循环颜色方案 Cyclical


完整代码参考:

<!DOCTYPE html>
<!--draw the graph completely-->
<html lang="en"><head><meta charset="UTF-8"><title>Title</title><!--import d3 version 5--><script type="text/javascript" src="https://d3js.org/d3.v5.min.js"></script><!--import jquery3.3.1--><!-- <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script> --><script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
</head><body><svg></svg><script>//get json fileconst data = {"nodes": [{"entity_name": "林黛玉","entity_id": "entity/2870013","ontology_name": "人员","relation_num": 4}, {"entity_name": "贾宝玉","entity_id": "entity/2870127","ontology_name": "人员","relation_num": 2},{"entity_name": "林如海","entity_id": "entity/2870147","ontology_name": "人员","relation_num": 2},{"entity_name": "桃花行","entity_id": "entity/3770056","ontology_name": "作品","relation_num": 2}],"links": [{"from": "entity/2870013","to": "entity/2870127","relation_id": "relation/815478","relation_name": "表哥"},{"from": "entity/2870013","to": "entity/2870147","relation_id": "relation/815532","relation_name": "父亲"},{"from": "entity/2870013","to": "entity/3770056","relation_id": "relation/815565","relation_name": "创作"}]}//GroupExplorer constructing function//this is one way to create a javascript objectfunction GroupExplorer(data) {console.log(data)//create an object-include some data//this is an another way to create a javascript objectvar defaultConfig = {windowWidth: window.innerWidth,windowHeight: window.innerHeight,defaultLinkDistance: 150,data: data}// console.log(defaultConfig)// 处理数据, 让同一本体下的实体颜色相同// 去重var ontologySet = new Set()defaultConfig.data.nodes.forEach(n => ontologySet.add(n.ontology_name))let ontologyList = [...ontologySet]console.log(ontologyList)//设置一个color的颜色比例尺,为了让不同本体的实体呈现不同的颜色var colorScale = d3.scaleOrdinal(d3.schemeSpectral)// .domain(d3.range(ontologyList.length))// .range([0,1]);let scale = d3.scaleLinear().domain([0,ontologyList.length+2]).range([0,1])// 方法一// var colorScale = d3.scaleOrdinal(d3.schemeYlGn[4]);var svg = d3.select("svg");svg.attr("width", defaultConfig.windowWidth);svg.attr("height", defaultConfig.windowHeight);defaultConfig.data.links.forEach(function (e) {var sourceNode = defaultConfig.data.nodes.filter(function (n) {return n.entity_id === e.from;})[0];var targetNode = defaultConfig.data.nodes.filter(function (n) {return n.entity_id === e.to;})[0];e.source = sourceNode;e.target = targetNode;// console.log(e)});//create a force graphvar forceSimulation = d3.forceSimulation().force("link", d3.forceLink()).force("charge", d3.forceManyBody()).force("center", d3.forceCenter(defaultConfig.windowWidth / 2, defaultConfig.windowHeight / 2));//transform nodes dataforceSimulation.nodes(defaultConfig.data.nodes).on("tick", ticked);//tranform links dataforceSimulation.force("link").links(defaultConfig.data.links).distance(defaultConfig.defaultLinkDistance);console.log(defaultConfig.data.nodes);console.log(defaultConfig.data.links);//define arrowsvg.append("svg:defs").append("svg:marker").attr("id", "marker").attr('viewBox', '0 -5 10 10').attr("refX", 20).attr("refY", 0).attr('markerWidth', 10).attr('markerHeight', 10).attr('orient', 'auto').append('svg:path').attr('d', 'M0,-5L10,0L0,5').attr("fill", "grey");//draw linksvar links = svg.append("g").selectAll("line").data(defaultConfig.data.links).enter().append("line").attr("x1", function (n) { return n.source.x }).attr("y1", function (n) { return n.source.y }).attr("x2", function (n) { return n.target.x }).attr("y2", function (n) { return n.target.y }).attr("stroke", "grey").attr("stroke-width", 1).attr("marker-end", "url(#marker)");//draw links-textvar links_text = svg.append("g").selectAll("text").data(defaultConfig.data.links).enter().append("text").attr("x", function (e) {return (e.source.x + e.target.x) / 2;}).attr("y", function (e) {// console.log(e.source.y + "+" + e.target.y)return (e.source.y + e.target.y) / 2;}).attr("font-size", 10).text(function (e) { return e.relation_name });//draw nodes group = node+node-textvar nodes_g = svg.append("g").selectAll("g").data(defaultConfig.data.nodes).enter().append("g").attr("transform", function (e) {return "translate(" + e.x + "," + e.y + ")";}).call(d3.drag().on("start", started).on("drag", dragged).on("end", ended));//draw nodesnodes_g.append("circle").attr("r", function (e) {return e.relation_num * 5})// .attr("fill", function(d,i){//     // return colorScale(i)//     return d3.interpolateSpectral(scale(i))// }// );.attr("fill", function(n){for(let i = 0; i<ontologyList.length;i++){if(n.ontology_name == ontologyList[i]){return d3.interpolateSpectral(scale(i))}}});//draw node-textnodes_g.append("text").attr("x", -15).attr("y", 20).attr("font-size", 10).text(function (e) { return e.entity_name });function started(d) {if (!d3.event.active) {forceSimulation.alphaTarget(0.8).restart();}d.fx = d.x;d.fy = d.y;}function dragged(d) {d.fx = d3.event.x;d.fy = d3.event.y;}function ended(d) {if (!d3.event.active) {forceSimulation.alphaTarget(0);}d.fx = null;d.fy = null;}function ticked() {links.attr("x1", function (n) { return n.source.x }).attr("y1", function (n) { return n.source.y }).attr("x2", function (n) { return n.target.x }).attr("y2", function (n) { return n.target.y })links_text.attr("x", function (e) {return (e.source.x + e.target.x) / 2;}).attr("y", function (e) {return (e.source.y + e.target.y) / 2;})nodes_g.attr("transform", function (e) {return "translate(" + e.x + "," + e.y + ")";})}}//because in the way of creating a javascript object,//you need to use "new" to use itnew GroupExplorer(data);</script>
</body>
</html>

更多样式可以参考: d3/d3-scale-chromatic

d3 - 力引导图(二) 为节点设置多种唯一颜色方案相关推荐

  1. d3 - 力引导图(三) 绑定事件

    d3样例库 介绍 .on("event",function): d3通过 on() 绑定时间, 它有两个参数: 第一个参数是事件类型 第二个参数是执行的内容 事件类型可以参考 MD ...

  2. d3 - 建立力引导图将知识图谱可视化 (一)

    本文要实现的功能与这个网页比较类似: KGBuilder知识图谱可视化 使用到的插件为: d3 没有采用echarts等实现的原因是: echarts比较死板, 有些需求不能实现, 而d3可以灵活的制 ...

  3. d3关联关系图力引导图,支持多条线,带箭头。

    代码链接:https://download.csdn.net/download/qq_42080160/11453702最实用d3关联关系力引导图,只需要引用一个js,向页面传一个josn串:写了非常 ...

  4. 数据可视化—D3力导向图—如何实现结点与其连线的交互

    文章目录 前言 1.编写目的 2.编码工具 一.如何实现 1. 结点交互连线变粗 2. 文本自动换行 3. 背景图片设置透明度 二.实现效果 三.完整代码 1.用到的数据: 2.实现代码: 总结 前言 ...

  5. 力引导图python实现 force directed layout

    force directed layout 力引导图python实现 实验内容: force directed layout编程实现 探讨三个force directed layout算法的加速策略 ...

  6. D3力导图绘制-基于line/path(v3、v7)

    结果展示 d3的版本之间很不一样,一定要对应上自己是v3 or v5 or v7 数据来源:开源开放|新冠知识图谱开放数据集第二批_病毒 v3版本:有简单的交互,可以拖拽,鼠标放上去能显示简介 v7版 ...

  7. php文字红色代码,IOS_IOS中一段文字设置多种字体颜色代码,给定range和需要设置的颜色, - phpStudy...

    IOS中一段文字设置多种字体颜色代码 给定range和需要设置的颜色,就可以给一段文字设置多种不同的字体颜色,使用方法如下: [self fuwenbenLabel:contentLabel Font ...

  8. d3力导向图增加节点_d3.js力导向图节点如何都显示在边框内

    最近用到d3.js中的force力导向图,想实现效果如下,所有城市节点都在可视范围内,如果超出有滚动条也可以. 遇到的问题是,当节点一多,有的节点就会跑到外面去,这边是通过加大charge相互作用力, ...

  9. d3 力导向图 force graph

    背景:项目 vue.js + d3 v4 力导向图可以直观看出各个元素之间的相互作用力 数据: {nodes:[{id:xxx, group: xx},{},...] // nodes 是每个节点 g ...

最新文章

  1. 调整php-fpm,nginx调整php-fpm
  2. 隐秘的角落——一个CIO的惊魂72小时
  3. python数字图像处理、色彩空间类型转换_Python+OpenCV图像处理—— 色彩空间转换...
  4. [Trie] Luogu P2580 于是他错误的点名开始了
  5. ATen(A TENsor library for C++11)剖析(1)
  6. MySQL二级比office二级_如何快速拿到计算机office二级
  7. 为什么用链路聚合_H3C ComwareV7平台网络设备可靠性配置——链路聚合
  8. 解决使用adb卸载应用失败的问题
  9. 获取当前程序运行的主机名称
  10. 微信小程序console.log出来的是object的问题解决方法
  11. 用计算机用图解法求理论塔板数,用Excel图解法求精馏塔理论塔板数.pdf
  12. 苹果手机软件升级密码_拥有苹果全家桶以后那些事
  13. C++ 入门2 ---- 类型转换
  14. python俄罗斯方块小游戏实验报告_用Python实现童年小游戏俄罗斯方块
  15. 反脆弱性:为什么工作越稳定,人生越脆弱?
  16. 微信小程序-WXML-template模板
  17. IntelliJ IDEA 中如何查看一个类的所有继承关系,包括父类与子类
  18. html内容被背景图片遮住怎么办_定义BODY背景图后,DIV的背景图片显示不全(已解决)...
  19. FPGA : 学习交流的网站和社区
  20. CSS-in-JS方案及实现库介绍

热门文章

  1. CentOS 7下Java的SecureRandom种子初始化失败解决办法
  2. 麦肯锡报告:关于深度学习的120个商业机会
  3. Visual C++编程实战宝典pdf 李琳娜,与光盘
  4. hadoop基础教程(二) MapReduce 单词统计
  5. echarts3.0--地图和其点击事件及地图内文字内容样式位置控制
  6. 双赢16帮源码程序淘宝商家平台源码程序仿大麦户谷得源码程序完整版源码
  7. LeeCode 297 dfs
  8. 关于商业智能 BI 认知上的误区,你有几个
  9. 物流与供应链管理一样吗?
  10. CCRC信息安全服务资质有哪几种常见的类型?