源码链接:https://github.com/nelsonkuang/ant-admin/blob/master/src/utils/d3-viz.js

的二分图部分。

1、整体的级联结构

整个bp代码涉及到一种代码的级联结构:

运行结果:

L13行的运行结果类似于 333.call(viz(111).data(222))【当然这句话不能直接运行】

2、整体函数列表

绘图的函数

设置绘图的原始数据

是颜色填充规则,需要传入一个函数

用于指定原始数据的哪一列作为first part

用在d3.nest()中

用于指定原始数据的哪一列作为second part

用在d3.nest()中

用于指定原始数据的哪一列作为边的权值

bp图的宽

bp图的高

bar的粗细

bar的最小长度

bp布局方向,(horizontal, vertical)

bar之间的padding,一般为0,否则可能两部    分的bar的总长度差别过大

边连接是用曲线还是直线(curved,straight)

返回第四节的绘图数据

用于视图的更新,当用户数据改变的时候调    用,这样比重新绘制更快。

mouseout事件,调用的函数

3、原始测试数据

var data=[
    ['A','X', 2] 
    ,['A','Y', 3] 
    ,['B','X', 5] 
    ,['B','Y', 8] 
    ,['C','X', 2] 
    ,['C','Y', 9] 
];

4、绘图数据

5、重点函数接口

1、Fill

Tips:

关于'=>'的用法见:https://blog.csdn.net/yangxiaodong88/article/details/80460332

z(0) ,z(1), z('a'),z('abc')都是能返回一个rgb的

d.primary 取值范围( A, B ,C)

2、bp中的方法,它们结构都比较类似,主要返回数据或者一个方法,用于参数的设置。

3、bp() 图形绘制函数,没啥难度

函数的第三句调用了一个bars = biPartite.bars(); 生成了绘图数据,见第四节。这句话是整段程序程序处理的核心。

4、bars()

//小于最小值,把他设为最小值

5、calculateMainBars


ps数据:

nest把表格数据转化成树结构的数据。


var bars = bpmap(ps, biPartite.pad(), biPartite.min(), 0, _or=="vertical" ? biPartite.height() : biPartite.width())

把传入的primary或secondary (原始数据的一半)生成rect的信息。

bars:


S: start(rect的起始位置) e:end(rect的结束位置) p:present


x:_or=="horizontal"? (bars[i].s+bars[i].e)/2 : (part=="primary" ? bsize/2 : biPartite.width()-bsize/2)

分了三种情况:

水平布局的话:对x来说,无所谓primary或secondary ,直接取此rect的中间位置。

垂直布局的话:primary当然在左侧,取bsize/2;bsize是用户设定的bar的粗细。Secondary在右侧,取biPartite.width()-bsize/2。

注意此时x取的是整个rect的中间位置。


height:_or=="vertical"? (bars[i].e - bars[i].s)/2 : bsize/2

很好理解,就是取了整个rect一半的高度,图示如下:

6、calculateSubBars

就是把数据按part分成两层,看第一层的每个元素a对应第二层的几个元素,再把a进行分割成等比例(按第二层的元素占比)的几个元素

7、calculateEdges

8、edgeVert

其中'M'(move to),'C'(curveto)都是大写的,表示绝对定位。(小写的表示相对定位)。'Z'(closepath)从当前位置到起点画一条直线闭合。

C表示三阶贝塞尔曲线,参数为三个点p1,p2,p3,p3是结束点,开始点p0与控制点p1控制前半段曲线的弯曲,控制点p2和结束点p3控制后半段曲线的弯曲。

如图所示:

9、bp.update

这个函数用于原始数据的改变,来update

10、绑定在mainBars上的mouseover

传入的数据下面这种类型的obj:

转载于:https://www.cnblogs.com/xunhanliu/p/10478099.html

NPashaP的二分图源码部分相关推荐

  1. 【Deformable DETR 论文+源码解读】Deformable Transformers for End-to-End Object Detection

    目录 前言 一.背景和改进思路 二.细节原理和源码讲解 2.1.多尺度特征 2.1.1.backbone生成多尺度特征 2.1.2.多尺度位置编码 2.2.多尺度可变形注意力 2.2.1.普通多头注意 ...

  2. AP问题的一些源码,待调试1

    这里记录几个源码,回去调试 首先安利一个超重要的知识点: edge-weighted-online-bipartite-matching 简述 Improved Analysis of RANKING ...

  3. geoserver三维_cesium结合geoserver实现地图空间查询(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  4. 查看Hotspot源码,查看java各个版本源码的网站,如何查看jdk源码

    java开发必知必会之看源码,而看源码的第一步则是找到源码

  5. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  6. liunx上mysql源码安装mysql,搞定linux上MySQL编程(一):linux上源码安装MySQL

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 1. 首先下载源码包: ftp://ftp.jaist.ac.jp/pub/m ...

  7. java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实

    好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...

  8. Go 源码里的这些 //go: 指令,go:linkname 你知道吗?

    原文地址: Go 源码里的这些 //go: 指令,你知道吗? 一文解惑 //go:linkname 指令

  9. 超详细中文预训练模型ERNIE使用指南-源码

    作者 | 高开远,上海交通大学,自然语言处理研究方向 最近在工作上处理的都是中文语料,也尝试了一些最近放出来的预训练模型(ERNIE,BERT-CHINESE,WWM-BERT-CHINESE),比对 ...

最新文章

  1. 关于vue+webpack的一点配置
  2. idea教程--使用mave创建普通java项目
  3. 用阿里云镜像解决Maven速度慢问题
  4. pycharm 报黄(黄字、黄色)警告 Local variable 'xxx' might be referenced before assignment
  5. linkedin规则
  6. 四 Spring的工厂类,xml的配置
  7. SAP Spartacus root.scss里的变量层级引用
  8. 第三次作业——朱华泓
  9. MySQL的索引类型及简单优化
  10. html目录参数加密,从HTML文件中取出JS加密需要的参数,并调用js内的加密算法
  11. NUC1170 加农炮
  12. SQL中JOIN和UNION区别及用法
  13. 深入解析字符串的比较方法:“==”操作符;String.Equals方法;String.Compare方法;String.CompareOrdinal方法。...
  14. 程序员的终极幻想(一):像操作数据库那样操作大脑的记忆
  15. TP5:框架下载与安装——1
  16. matlab如何调用swmm,一套基于SWMM开放的城市管网系统控制设计
  17. [工具分享]阿里云语音合成方言和外语Windows版本
  18. file和directory区别
  19. raid服务器如何备份系统,RAID服务器的系统分区备份方法
  20. angular primeng table 非sortIcon排序

热门文章

  1. Nav- buttons和$ionicView
  2. const成员或者引用成员必须使用构造函数初始化列表的方式
  3. 解決 Tomcat 5.0.x % include file ... % 的中文亂碼問題
  4. linux设置密码过期时间
  5. C++ 编译器多态与运行时多态
  6. linux I/O--I/O多路复用--介绍(二)
  7. java steam 排序_java8 stream自定义分组求和并排序的实现
  8. SQL操作类详细注释版
  9. js之call,apply和bind的模拟实现
  10. 启动springboot报错Error creating bean with name 'dataSource' defined in class path resource