可视化—gojs 超多超实用经验分享(二)

想了想序号还是接上一篇分享的的序号接着写,如果在本文中没有获取需要的答案,可以移步去看看上一篇的分享。gojs 超多超实用经验分享(一)

22. 指定线段连接到节点的某一个特定的接口上

如果不指定链接点的话,gojs会自动规划一条路径,具体算法还不是很清楚,总之大部分时候按默认的算法规划出来的路径,还是比较美观的,但是当节点比较多且关系复杂的时候,可能会出现几条线路并不是很美观,需要自己动态的调整一下,看下两种写法:

第一种:所有节点均指定相同的出入连接点,关键属性:fromSpot、toSpot

可选值 :Top、 Bottom、Right 、Left 是从节点对应方向的center开始连接, 也可以指定: TopRight、 TopLeft、BottomRight、BottomLeft

myDiagram.linkTemplate = $(
  go.Link,
  {
    // routing, corner, curve....等属性 
    fromSpot: go.Spot.Top,  // 从上出  
    toSpot: go.Spot.Bottom  // 从下入
  },
);

第二种: 根据不同的属性,动态绑定,关键属性:fromSpot、toSpot,关键方法:go.Binding

myDiagram.linkTemplate = $(
  go.Link,
  {
    // routing, corner, curve....等属性 
  },
  new go.Binding("toSpot",'linkto',()=>go.Spot.Top), // 回调函数 返回具体连接点位置
);
var linkDataArray = [
  { from: "A", to: "B",linkto:'Top'},  // 属性名随便,值也随便,上边回调判断的是,linkto字段有没有值
  { from: "B", to: "C",,linkto:'Top'},
];

23. 给节点设置连线端口spot

myDiagram.nodeTemplate =$(
  go.Node,
  'Auto',
  $(
    go.Shape,
    'RoundedRectangle',
    { fill: '#eee', parameter1: 5, opacity: 0.7, stroke: '#eee' },
  ),
   //  其他Panel / Shape / TextBlock 零件配置
  $(go.Panel, 'Vertical', { alignment: go.Spot.TopLeft }, makePort('1')),
  $(go.Panel, 'Vertical', { alignment: go.Spot.TopRight }, makePort('2'))
)

nodeDataArray = [{ key: 'A' },{ key: 'B' }]
linkDataArray = [{ from: 'A', to: 'B', frompid: '1', topid: '2'}]
myDiagram.model = new go.GraphLinksModel(nodeDataArray, linkDataArray)
myDiagram.model.linkFromPortIdProperty = 'frompid'   // 1
myDiagram.model.linkToPortIdProperty = 'topid'  // 2

// 创建端口
function makePort(name) {
  var port = $(go.Shape, 'Rectangle', {
    fill: 'transparent',
    stroke: null,
    desiredSize: new go.Size(8, 8),
    portId: name,
    toMaxLinks: 3,
    cursor: 'pointer'
  },
  new go.Binding('fromSpot', 'xxx', () => go.Spot.Right),
  new go.Binding('toSpot', 'xxx', () => go.Spot.Left)
)

  var panel = $(go.Panel, 'Horizontal', { margin: new go.Margin(8, 0) })
  panel.add(port)
  return panel
}

24. 设置折叠面板及部分默认样式

$('PanelExpanderButton', 'COLLAPSIBLE', {
  alignment: go.Spot.Right,
  _buttonExpandedFigure: 'M0 0  L8 0',
  _buttonCollapsedFigure: 'M0 0 L8 0 M4 -4 L4 4',
  'ButtonBorder.fill': '#fff',
  'ButtonBorder.stroke': '#fff',
  width: 15,
  height: 15,
  margin: 3,
})

25. itemArray 抽离封装引用,面板中设置表格,并给表格设置边框

// 表格数据,用于下方面板中
var fieldTemplate = $(
  go.Panel,
  'TableRow',
  $(
    go.TextBlock,
    {
      margin: new go.Margin(3, 5),
      column: 1,    // 表格第一列
      font: '13px sans-serif',
      alignment: go.Spot.Left
    },
    new go.Binding('text', 'name')
  ),
  $(
    go.TextBlock,
    {
      margin: new go.Margin(3, 5),
      column: 2,  // 表格第二列
      font: 'bold 13px sans-serif',
      alignment: go.Spot.Left
    },
    new go.Binding('text', 'age'),
  )
);
// 表格面板 
$(
  go.Panel,
  'Table',
  {
    name: 'COLLAPSIBLE',
    stretch: go.GraphObject.Horizontal,
    background: 'white',
    defaultAlignment: go.Spot.Left,
    itemTemplate: fieldTemplate,
    defaultColumnSeparatorStroke: '#ccc',    // 列边框
    defaultRowSeparatorStroke: '#ccc'  // 行边框
  },
  new go.Binding('itemArray', 'dataList')
)

26. 设置渐变色

const pinkbluegrad= $(go.Brush, 'Linear', { 0: '#F48FB1', 1: '#90CAF9' })  // 粉蓝渐变
$(go.Shape, "Rectangle",{ desiredSize: new go.Size(30, 30), fill: pinkbluegrad, margin: 5 }),

27. 与端口相邻的链路段的长度

myDiagram.linkTemplate = $(
  go.Link,
   {
    // routing ,corner ,... ,
    fromEndSegmentLength: 40,
    toEndSegmentLength:40
   })

28. 设置/关闭选中效果

选中效果,就是节点外层有一层蓝色的边框, 选中的样式也是可以自定义的,详细可以查看下文档,因为我没有用到,所以就没进行记录。

myDiagram.select(myDiagram.findNodeForKey(key))   // 设置选中节点
$( go.Node, 'auto', { selectionAdorned: false})   // 关闭选中节点

29. 画布垂直水平居中

尽量能够保证在画布init之后,在执行,可以在外层加一个定时器

myDiagram.alignDocument(go.Spot.Center, go.Spot.Center)
myDiagram.contentAlignment = go.Spot.Default
myDiagram.commandHandler.scrollToPart(diagram.findNodeForKey(key))

30. 将某一个节点聚焦至画布中心

myDiagram.commandHandler.scrollToPart(myDiagram.findNodeForKey(key))

31. button使用和修改默认样式

还有更多的自定义样式,可以去button.js源码中查看。

$(
   'Button',
    {
       'ButtonBorder.fill': 'white',
       'ButtonBorder.stroke': 'white',
       _buttonFillOver: '#E0E0E0',
       _buttonStrokeOver: '#E0E0E0',
       cursor: 'pointer',
       maxSize: new go.Size(100, NaN),
       minSize: new go.Size(60, NaN),
        click: ()=>{}  // 建议单独抽离为一个函数
    },
    $(go.TextBlock, new go.Binding('text'))
),
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 热力图可视化元素周期表 使用seaborn库创建热力图来可视化元素周期表中的微量元素。 ```python import pandas as pd import seaborn as sns # 读取元素周期表数据 periodic_table = pd.read_csv('periodic_table.csv', index_col=0) # 创建热力图 sns.heatmap(periodic_table.iloc[:, :20], cmap='YlGnBu', annot=True, fmt='.0f', cbar=False) ``` 2. 散点图可视化微量元素之间的关系 使用matplotlib库创建散点图来可视化微量元素之间的相关性。 ```python import pandas as pd import matplotlib.pyplot as plt # 读取微量元素数据 trace_elements = pd.read_csv('trace_elements.csv') # 创建散点图 plt.scatter(trace_elements['Iron'], trace_elements['Zinc'], label='Zinc') plt.scatter(trace_elements['Iron'], trace_elements['Copper'], label='Copper') plt.scatter(trace_elements['Iron'], trace_elements['Manganese'], label='Manganese') plt.xlabel('Iron') plt.ylabel('Trace Elements') plt.legend() ``` 3. 柱状图可视化微量元素含量 使用pandas库创建柱状图来可视化微量元素的含量。 ```python import pandas as pd import matplotlib.pyplot as plt # 读取微量元素数据 trace_elements = pd.read_csv('trace_elements.csv', index_col=0) # 创建柱状图 trace_elements.plot(kind='bar', figsize=(10, 5)) plt.xlabel('Samples') plt.ylabel('Trace Elements') plt.title('Trace Elements in Samples') plt.legend(loc='upper right') ``` 4. 箱线图可视化微量元素分布情况 使用seaborn库创建箱线图来可视化微量元素的分布情况。 ```python import pandas as pd import seaborn as sns # 读取微量元素数据 trace_elements = pd.read_csv('trace_elements.csv', index_col=0) # 创建箱线图 sns.boxplot(data=trace_elements) plt.xlabel('Trace Elements') plt.title('Distribution of Trace Elements') ``` 5. 雷达图可视化微量元素含量比较 使用matplotlib库创建雷达图来可视化微量元素含量比较。 ```python import pandas as pd import matplotlib.pyplot as plt # 读取微量元素数据 trace_elements = pd.read_csv('trace_elements.csv', index_col=0) # 创建雷达图 categories = trace_elements.columns.tolist() N = len(categories) values = trace_elements.iloc[0].values.tolist() values += values[:1] angles = [n / float(N) * 2 * 3.141592653589793238462643383279 for n in range(N)] angles += angles[:1] plt.polar(angles, values, marker='o') plt.xticks(angles[:-1], categories, color='grey', size=8) plt.ylim(0, 100) plt.title('Trace Elements in Sample 1') ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值