【antv/g6】按条件字段设置不同节点颜色的2种方法

有两种方法:

一、通过数据data的item去控制

在这里插入图片描述

const data = {
            nodes: [
              {
                id: '0',
                label: 'B1106\n32874PB',
                size: [80, 80],
                labelCfg: {
                  position: 'center',
                  style: {
                    fill: '#595959',
                    fontSize: 14,
                  },
                },
                style: {
                  // fill: 'r(0.5, 0.5, 0.1) 0:#ffffff 1:#1890ff',
                  fill: 'l(0) 0:#ffffff 0.5:#7ec2f3 1:#1890ff',
                  stroke: '#5B8FF9',
                  lineWidth: 1,
                },
              },
              {
                id: '1',
                label: '1',
              },
             ]
}

之后在const graph = new G6.Graph配置里添加defaultNode属性(这么做的目的是设置一个默认节点配置,如果节点没有单独赋值,就会采用以下配置):

defaultNode: {
              size: [15, 10],
              type: 'circle',
              labelCfg: {
                position: 'right',
              },
              style: {
                lineWidth: 2,
                stroke: '#5B8FF9',
                fill: '#C6E5FF',
              },
            },

二、通过graph.node设置回调函数统一处理

在这里插入图片描述

// 以下是重点
    graph.node((node) => {
      if (node.flag === "b") {
        return {
          style: {
            fill: "#fff",
            stroke: "#ea7171",
          },
        };
      }
      return {
        style: {
          fill: "#2db7f5",
          stroke: "#ea7171",
        },
      };
    });

完整代码如下:

import { useEffect, useState, memo } from "react";
import G6 from "@antv/g6";

let graph = null;
export default memo(function RelaNew() {
  useEffect(() => {
    graph && graph.destroy();
    const container = document.getElementById("barContainer");

    const data = {
      nodes: [
        {
          id: "0",
          label: "0",
          flag: "b",
        },
        {
          id: "1",
          label: "1",
          flag: "b",
        },
        {
          id: "2",
          label: "2",
          flag: "a",
        },
        {
          id: "3",
          label: "3",
          flag: "b",
        },
        {
          id: "4",
          label: "4",
          flag: "a",
        },
      ],
      edges: [
        {
          source: "0",
          target: "1",
        },
        {
          source: "0",
          target: "2",
        },
        {
          source: "0",
          target: "3",
        },
        {
          source: "0",
          target: "4",
        },
      ],
    };

    const width = document.getElementById("barContainer").scrollWidth;
    const height = document.getElementById("barContainer").scrollHeight || 500;
    graph = new G6.Graph({
      container: "barContainer",
      width,
      height,
      modes: {
        default: ["drag-canvas", "drag-node"],
      },
      layout: {
        type: "fruchterman",
        gravity: 5,
        speed: 5,
      },
      animate: true,
      defaultNode: {
        size: 30,
        style: {
          lineWidth: 2,
          stroke: "#5B8FF9",
          fill: "#C6E5FF",
        },
      },
      defaultEdge: {
        size: 2,
        color: "#e2e2e2",
        style: {
          endArrow: {
            path: "M 0,0 L 8,4 L 8,-4 Z",
            fill: "#e2e2e2",
          },
        },
      },
    });

    // 以下是重点
    graph.node((node) => {
      if (node.flag === "b") {
        return {
          style: {
            fill: "#fff",
            stroke: "#ea7171",
          },
        };
      }
      return {
        style: {
          fill: "#2db7f5",
          stroke: "#ea7171",
        },
      };
    });
    graph.data(data);
    graph.render();
  }, []);

  return (
    <div id="barContainer" style={{ width: "100%", height: "100%" }}></div>
  );
});

好的,以下是一段自定义node,且node高度不一致的antv g6 树形范例代码: ```javascript import G6 from '@antv/g6'; G6.registerNode('customNode', { draw(cfg, group) { const width = 60; const height = cfg.height || 60; // 自定义高度 const shape = group.addShape('rect', { attrs: { x: -width / 2, y: -height / 2, width, height, fill: '#CDDDFD', stroke: '#6E6E6E', radius: 10, }, name: 'rect-shape', }); if (cfg.label) { group.addShape('text', { attrs: { text: cfg.label, x: 0, y: 0, textAlign: 'center', textBaseline: 'middle', fill: '#000000', }, name: 'text-shape', }); } return shape; }, }); const data = { id: 'root', label: 'root', children: [ { id: 'node1', label: 'node1', children: [ { id: 'node11', label: 'node11', height: 80, // 自定义高度 }, { id: 'node12', label: 'node12', }, ], }, { id: 'node2', label: 'node2', height: 80, // 自定义高度 }, ], }; const container = document.getElementById('container'); const width = container.scrollWidth; const height = container.scrollHeight || 500; const graph = new G6.TreeGraph({ container, width, height, modes: { default: ['zoom-canvas', 'drag-canvas', 'click-select'], }, defaultNode: { type: 'customNode', }, layout: { type: 'compactBox', direction: 'TB', getHGap: () => 50, getVGap: () => 20, }, }); graph.data(data); graph.render(); ``` 这段代码定义了一个自定义节点类型 `customNode`,它可以根据配置中的 `height` 字段设置节点高度,从而实现树形结构中不同节点高度不一致的效果。同时,这段代码还使用了 `compactBox` 布局来自动排列节点,使得整个树形结构更加紧凑。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hzxOnlineOk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值