chord

chord是一种用于可视化矩阵关系数据的环形图表,通过围绕圆周排列的节点弧及相互连接的带状曲线,直观展示不同类别间的双向流量或关联强度。在chord中,数据点(节点)通常沿着圆环排列,通过弦(曲线)来连接节点之间的关系或流动。每条弦不仅可以体现两个节点之间的连接,还可以通过视觉通道(如颜色、宽度、透明度等)来表示关系的权重或强度。弦图广泛应用于社交网络、系统调用关系、流量分布和交易流分析等场景,通过清晰地展现节点之间的复杂连接,可以帮助用户快速理解数据中的结构和模式。

import { Chart } from '@antv/g2';

const chart = new Chart({
  container: 'container',
});

chart.options({
  type: 'chord',
  layout: { nodeWidthRatio: 0.05 },
  data: {
    value: {
      links: [
        { source: '北京', target: '天津', value: 30 },
        { source: '北京', target: '上海', value: 80 },
        { source: '北京', target: '河北', value: 46 },
        { source: '北京', target: '辽宁', value: 49 },
        { source: '北京', target: '黑龙江', value: 69 },
        { source: '北京', target: '吉林', value: 19 },
        { source: '天津', target: '河北', value: 62 },
        { source: '天津', target: '辽宁', value: 82 },
        { source: '天津', target: '上海', value: 16 },
        { source: '上海', target: '黑龙江', value: 16 },
        { source: '河北', target: '黑龙江', value: 76 },
        { source: '河北', target: '内蒙古', value: 24 },
        { source: '内蒙古', target: '北京', value: 32 },
      ],
    },
  },
  scale: {
    color: {
      range: [
        '#4e79a7',
        '#f28e2c',
        '#e15759',
        '#76b7b2',
        '#59a14f',
        '#edc949',
        '#af7aa1',
        '#ff9da7',
        '#9c755f',
        '#bab0ab',
      ],
    },
  },
  style: { labelFontSize: 15, linkFillOpacity: 0.6 },
});

chart.render();

配置项

属性 描述 类型 默认值 必选
encode 配置 chord 标记的视觉通道,包括colorshape等,用于指定视觉元素属性和数据之间的关系 encode -
layout 配置 chord 布局方式 layout -
scale 配置 chord 标记的图形缩放,包括xycolorshape scale {x: { type: 'identity' },y: { type: 'identity' }}
style 配置 chord 图形样式 style -

encode

属性 描述 类型 默认值
color 映射节点或连接弦的颜色,用于区分不同的类别或关系强度 encode -
nodeShape 弦图中节点的形状,定义节点在可视化中的具体外观表现。 string| Function<string> polygon
linkShape 弦图中连接弦的形状,定义弦在可视化中的具体外观表现。 string| Function<string> ribbon
source 定义连接弦的起点,通常映射到一个节点字段 string| Function<string> source
target 定义连接弦的终点,通常映射到另一个节点字段 string| Function<string> target

source/target

sourcetarget 视觉通道影响 chord 图形标记连接弦的起点和终点的重要属性。source 映射到数据中表示连接关系的起始节点字段,而 target 则映射到连接关系的终止节点字段。这两个属性共同构建了弦图中节点之间的关系逻辑,通过直观的连接弦表现节点之间的交互或依赖。

import { Chart } from '@antv/g2';

const chart = new Chart({
  container: 'container',
});

chart.options({
  type: 'chord',
  data: {
    value: {
      links: [
        { begin: '北京', end: '天津', value: 34 },
        { begin: '北京', end: '上海', value: 95 },
        { begin: '北京', end: '河北', value: 61 },
        { begin: '北京', end: '辽宁', value: 32 },
        { begin: '北京', end: '黑龙江', value: 84 },
        { begin: '北京', end: '吉林', value: 19 },
        { begin: '天津', end: '河北', value: 62 },
        { begin: '天津', end: '辽宁', value: 34 },
        { begin: '天津', end: '上海', value: 48 },
        { begin: '上海', end: '黑龙江', value: 67 },
        { begin: '河北', end: '黑龙江', value: 37 },
        { begin: '河北', end: '内蒙古', value: 51 },
        { begin: '内蒙古', end: '北京', value: 56 },
      ],
    },
  },
  encode: {
    source: 'begin',
    target: 'end',
  },
});

chart.render();

sourcetarget等 encode 属性也支持动态获取数据中的值,可以传入一个方法,chart 在执行时会调用这个方法计算出需要的结果

import { Chart } from '@antv/g2';

const chart = new Chart({
  container: 'container',
});

chart.options({
  type: 'chord',
  data: {
    value: {
      links: [
        { begin: '北京', end: '天津', value1: 34, value2: 46 },
        { begin: '北京', end: '上海', value1: 95, value2: 69 },
        { begin: '北京', end: '河北', value1: 61, value2: 62 },
        { begin: '北京', end: '辽宁', value1: 32, value2: 82 },
        { begin: '北京', end: '黑龙江', value1: 84, value2: 30 },
        { begin: '北京', end: '吉林', value1: 19, value2: 1 },
        { begin: '天津', end: '河北', value1: 62, value2: 24 },
        { begin: '天津', end: '辽宁', value1: 34, value2: 16 },
        { begin: '天津', end: '上海', value1: 48, value2: 49 },
        { begin: '上海', end: '黑龙江', value1: 67, value2: 80 },
        { begin: '河北', end: '黑龙江', value1: 37, value2: 67 },
        { begin: '河北', end: '内蒙古', value1: 51, value2: 16 },
        { begin: '内蒙古', end: '北京', value1: 56, value2: 76 },
      ],
    },
  },
  encode: {
    source: (d) => d.begin,
    target: (d) => d.end,
  },
});

chart.render();

更多的encode配置,可以查查看 encode 介绍页面。

layout

layout 属性用于控制弦图的布局方式,定义节点和连接弦如何在画布上呈现。弦图的布局通常以圆形(环形)为基础,将所有节点均匀地分布在圆周上,并通过连接弦来展示节点之间的关系和权重。通过 layout 配置,可以进一步调整节点位置、连接方式和图形的结构。

属性 描述 类型 默认值
y 布局时 y 轴的坐标 number 0
id 节点的键 Function<string | number> (node) => node.key
source 设置弦图的来源节点数据字段 Function<string> (edge) => edge.source
target 设置弦图的目标节点数据字段 Function<string> (edge) => edge.target
sourceWeight 来源的权重 Function<number> (edge) => edge.value | 1
targetWeight 目标的权重 Function<number> (edge) => edge.value | 1
sortBy 排序方法,可选 id, weight, frequency 排序或者自定义排序方法 string | Function<number> null
nodeWidthRatio 弦图节点的宽度配置,0 ~ 1,参考画布的宽度 number 0.05
nodePaddingRatio 弦图节点之间的间距,0 ~ 1,参考画布的高度 number 0.1

scale

scale 属性用于定义数据字段如何映射到图形的视觉属性(如节点位置、弦的长度、颜色等),从而影响弦图的呈现方式。通过配置 scale,可以调整节点的排列顺序、连接弦的权重比例或颜色映射,使图表更符合数据特征或用户的分析需求。

属性 描述 类型 默认值
x 定义节点在圆周上的排列位置,可以映射到分类或数值字段 Record<string, scale> { type: 'identity' }
y 控制节点或弦的投影位置,通常在弦图中不常显式设置 Record<string, scale> { type: 'identity' }
color 定义节点或连接弦的颜色映射规则,用于区分不同的类别或关系强度 Record<string, scale> -
size 映射连接弦的粗细或节点的大小,以表示权重或强度 Record<string, scale> -

更多的scale配置,可以查查看 scale 介绍页面。

style

style 属性提供了一系列用于定制弦图视觉效果的配置选项,主要作用于节点(node)、连接弦(link)和标签(label)。

属性 描述 类型 默认值
linkFillOpacity chord 图形中连接弦(即连接不同节点之间的关系线)的填充透明度的。 number | Function<number> 1
linkFill chord 图形中连接弦(即连接不同节点之间的关系线)的填充颜色 string | Function<number> -
linkStroke chord 图形中连接弦的边框颜色 string | Function<number> -
linkOpacity chord 图形中连接弦的整体透明度(包括填充和边框) number | Function<number> 0.5
linkLineDash chord 图形中连接弦边框的虚线样式 [number, number] -
labelFill chord 图形中节点标签的字体颜色 string | Function<number> -
labelFillOpacity chord 图形中节点标签字体颜色的透明度 number | Function<number> 0.6
labelFontSize chord 图形中节点标签(Label)的字体大小 number | Function<number> 10
labelFontWeight chord 图形中节点标签的字体粗细(如 "normal""bold" string| number normal
labelOpacity chord 图形中节点标签的整体透明度 number | Function<number> 1
nodeFill chord 图形中节点的填充颜色 string | Function<number> -
nodeFillOpacity chord 图形中节点的填充透明度 number | Function<number> 1
nodeStroke chord 图形中节点的边框颜色 string | Function<number> -
nodeOpacity chord 图形中节点的整体透明度 number | Function<number> 1
nodeLineDash chord 图形中节点边框的虚线样式 [number, number] -
cursor 鼠标样式。同 css 的鼠标样式,默认 ‘default’。 string | Function<number> ‘default’

更多的style配置,可以查看 style 介绍页面。

尝试一下:

import { Chart } from '@antv/g2';
import { schemeTableau10 } from 'd3-scale-chromatic';

const chart = new Chart({
  container: 'container',
  width: 900,
  height: 600,
});

const data = [
  {
    source: '北京',
    target: '天津',
    value: 30,
  },
  {
    source: '北京',
    target: '上海',
    value: 80,
  },
  {
    source: '北京',
    target: '河北',
    value: 46,
  },
  {
    source: '北京',
    target: '辽宁',
    value: 49,
  },
  {
    source: '北京',
    target: '黑龙江',
    value: 69,
  },
  {
    source: '北京',
    target: '吉林',
    value: 19,
  },
  {
    source: '天津',
    target: '河北',
    value: 62,
  },
  {
    source: '天津',
    target: '辽宁',
    value: 82,
  },
  {
    source: '天津',
    target: '上海',
    value: 16,
  },
  {
    source: '上海',
    target: '黑龙江',
    value: 16,
  },
  {
    source: '河北',
    target: '黑龙江',
    value: 76,
  },
  {
    source: '河北',
    target: '内蒙古',
    value: 24,
  },
  {
    source: '内蒙古',
    target: '北京',
    value: 32,
  },
];

chart.options({
  type: 'chord',
  data: {
    value: { links: data },
  },
  layout: {
    nodeWidthRatio: 0.05,
  },
  scale: { color: { range: schemeTableau10 } },
  style: { labelFontSize: 15, linkFillOpacity: 0.6 },
});

chart.render();
全站搜索
文档与示例输入关键词开始搜索

输入关键词,查找文档、API 与示例

选择打开Esc关闭