npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

hz-graph-canvas

v3.17.0

Published

利用create-react-app搭建图谱demo,图渲染组件已封装好graph.canvas,已发布npm包`hz-graph-canvas`

Downloads

336

Readme

graph.canvas 图渲染组件说明

简单使用

引用hz-graph-canvas,然后参考app.js 的调用

import GraphCanvas from 'hz-graph-canvas'
import GraphData from './data/mockGraph'

const force = new GraphCanvas(canvas.current, {
  data: GraphData,
})
force.init()

定制化使用

由于图渲染组件都是纯js文件。如果需要定制化开发一些复杂的图析功能。可以采用继承的方式重写部分关键代码

// force.business.js
import ForceCanvas from 'hz-graph-canvas'
export default class ForceBusiness extends ForceCanvas {
  constructor(ele, options) {
      super(ele, options)
      this.state = {}
      if (!Object.__proto__) { // 兼容ie10
          ForceCanvas.call(this, ele, options)
      }
  }
  // 重写draw函数
  draw() {

  }
}
// 使用定制化后的图析组件
import ForceBusiness from './force.business.js'
import GraphData from './data/mockGraph'

const force = new ForceBusiness(canvas.current, {
  data: GraphData,
})
force.init()

参数说明

{
    width: window.innerWidth, // 画布宽度
    height: window.innerHeight, // 画布高度
    data: { vertexes: [], edges: [] }, // 图谱数据
    theme: 'pure', // 默认纯净主题(业务配置)
    radius: 20, // 节点默认大小
    lineWidth: 1, // 边默认粗细
    force_to_ring_optimization: false, // force_to_ring_optimization为true时,表示force布局在数据量小的情况下直接采用 ring 布局,提高渲染速度
    // boldLineWidth: 2, // 数据需要鼠标悬浮时高亮路径时的路径线条粗细
    fontSize: 10, // 文案默认大小
    optimizeVertexThreshold: 500, // 触发渲染优化所需要的最小节点个数(目前看好像是有节点的附加样式的展示、边label的展示)
    zoomOptimize: { // 缩放优化
        enableOptimize: true, // 是否开启优化
        optimizeMaxVertex: 500, // 触发缩放优化所需要的最小节点个数
        optimizeMaxEdge: 500
    },
    // fontFamily: 'PingFang SC, Microsoft YaHei, Helvetica, Arial, Verdana, sans-serif',
    fontFamily: 'character, PingFang SC, Microsoft YaHei, Helvetica, Arial, Verdana, sans-serif, iconfont, FontAwesome', // 默认字体
    displayTextThreshold: 0.5, // 字体展示的缩放阈值,默认放大到 0.5 倍时才展示节点中的文字
    arrowLength: 5, // 边箭头斜边长度
    arrowDt: Math.PI / 6, // 箭头斜边与边的夹脚
    scaleExtent: [0.01, 2],
    canvasShift: [0, 0], // left, top shift
    // highlightEdgeWidth: 4,
    // 不同主题对应的节点边默认颜色
    light: {
        vertex: '#4FA2F1',
        edge: '#64C69F',
        centerVertex: '#EF4772'
    },
    deep: {
        vertex: '#82C896',
        edge: '#4FA2F1'
    },
    mix: {
        vertex: '#FFFFFF',
        edge: '#5A5D7A'
    },
    pure: {
        vertex: '#82C896',
        edge: '#4FA2F1'
    },
    onRenderEnd: () => { },
    onClickVertex: () => { },
    onClickEdge: () => { },
    onZoom: () => { },
    onRenderEndProcessData: () => {},
    onRenderEndAni: () => {},
    onDragStart: () => {},
    onClickOutSide: () => {},
    onContextmenu: () => {},
    onHoverVertexAndEdge: () => {},
    layout: { // 布局类型
        /**
         * force: 力导向布局
         * card: 卡片式布局
         * tree: 树状布局
         * grid: 网格布局
         * flow: 流向布局
         * horization: 横向布局
         * annular: 环状布局
         * octopus: 八爪鱼布局
         * random: 随机布局
        */
        type: 'force'
    },
    vertex: {
        type: 'circle',
        vertexRadiusMap: {  //节点大小映射列表,对应节点数据属性uiconfig.size
            1: 30,
            2: 25,
            3: 20,
        }
    },
    edge: {
        type: 'line',
        edgeLineWidthMap: { //边尺寸映射列表,对应边数据属性uiconfig.size
            '1': 3,
            '2': 2,
            '3': 1,
            'xSmall': 1,
            'small': 1,
            'normal': 1,
            'large': 1,
            'xLarge': 1,
        }
    },
    combo: {
        type: 'circle'
    },
    cardWidth: 166, // 树状卡片式布局卡片宽度
    cardHeight: 60, // 树状卡片式布局卡片高度
    graphCenterBy: 'POS', // 'NODE' 中心节点居中 || 'POS' 图数据中心位置居中
    vertexClickConfig: { // 节点点击配置
        isNormalRelateVertex: true // 是否将关联的实体置为正常状态
    },
    minMap: {
        show: true, //是否显示小地图
        id: 'thumbnail', // 绘制小地图canvas id 默认值 thumbnail
        operationId: 'thumbnailOperation' // 绘制小地图操作项 id 默认值 thumbnailOperation
    },
    showEdgeLabel: true, // 是否默认展示关系label
    showVertexLabel: true, // 是否默认展示实体label
    animationOptions: { // 动画的配置提供(目前仅布局切换以及展开)
        isAnimateActive: false, // 是否开启
        animateDuration: 1000, // 可选 动画持续时间
        animationCurve: null //可选 动画执行曲线函数 
    },
    octopusOptions: { // 八爪鱼布局的参数 如果不调用内置的api转化数据,需要提供如下以保证功能可用
        levelDataMap: new Map() // 层级关系
        foldVertexMap: new Map() // 存储八爪鱼的节点收起后的各自的归属关系
    }
}

graphData 说明

  • graphData

|参数名|必选|类型|说明| |:----- |:----- |:-----|----- | |vertexes | 是 |Array |节点列表 | |edges | 是|Array |边列表 | |gdbUiConfig | 否 |object |图样式对象 |

  • 单个顶点vertex参数

|参数名|必选|类型|说明| |:----- |:----- |:-----|----- | |_id|是|string|顶点id,当需要自定义使用八爪鱼布局时 指定为OctopusNode/123456 |_tag|否|string|实体标记(起点START、终点END),可以为NULL = [‘START’, ‘END’, ‘MARK’] |_label|是|string|显示内容(由可视化配置(如 ${name}-{sex} )决定) |fieldUiConfigs|否|Array|字段的可视化样式配置,可以为NULL |schemaInfo|是|object|表基本信息 |timelineFieldValue|否|date|时间轴字段值,可以为NULL |uiConfig | 是| object |顶点/边的样式对象 |x|是|double |横坐标 |y|是|double |纵坐标 |octopusInfo|否|object|使用八爪鱼布局且不调用内置api转化数据时需要提供的数据

  • 单个边edge参数

|参数名|必选|类型|说明| |:----- |:----- |:-----|----- | |_id|是|string|顶点id,当需要自定义使用八爪鱼布局时 OctopusEdge/123456 |_from|是|string|本边对应的起始节点id |_to|是|string|本边对应的结束节点id |_label|是|string|显示内容(由可视化配置(如 ${name}-{sex} )决定) |fieldUiConfigs|否|Array|字段的可视化样式配置,可以为NULL |schemaInfo|是|object|表基本信息 |timelineFieldValue|否|date|时间轴字段值,可以为NULL |uiConfig | 是| obect |顶点/边的样式对象 |source|是|object|本边对应的起始节点vertex对象 |target|是|object|本边对应的结束节点vertex对象

  • schemaInfo 表基本信息

|参数名|必选|类型|说明| |:----- |:----- |:-----|----- | |directed|是|boolean|是否有方向 |schemaName|是|string|图元所属表物理名称 |schemaNameCn|是|string|图元所属表中文名称

  • 外观uiConfig参数

|参数名|必选|类型|说明| |:----- |:----- |:-----|----- | |color|是|string|颜色,色值 |radius|是|number|尺寸(半径) |style|是|string|图标,iconfont的class |shape|是|string|形状,实体独有,根据0-8映射

  • 实体形状shape参数

|形状id|对应形状| |:----- |:----- | |'1'|圆形 |'2'|方形 |'3'|三角形 |'4'|五角星 |'5'|菱形 |'6'|五边形 |'7'|六边形 |'8'|椭圆 |'0'|无形状,即如只有图标则只展示图标,实际还是圆形打底

  • octopusInfo 八爪鱼布局下的实体数据

|参数名|类型|说明| |:----- |:----- |:----- | |octopusEdges|array|关系转化前的原始id数组 |downStreamNode|array|下游节点的id数组 |upStreamNode|string|上游节点id

八爪鱼布局的使用

  • 目前提供两种方式来使用,一种是调用内置api完成八爪鱼特定数据的转化即可使用 另外一种可手动提供所需要的数据以及必要参数则无需转换。
  • 详细可看如上参数说明,结合项目下demo有简单演示