igraph#

igraph 是一个流行的图库,PyGraphistry 可以与之接口。这使您能够利用 igraph 的布局算法,以及可选的算法增强功能。它是基于 CPU 的,通常可以处理中小型图。

graphistry.plugins.igraph.compute_igraph(self, alg, out_col=None, directed=None, use_vids=False, params={}, stringify_rich_types=True)#

使用igraph方法丰富或替换图形

Parameters:
  • alg (str) – igraph.Graph方法的名称,例如pagerank

  • out_col (可选[str]) – 对于生成节点属性列的算法,out_col 是期望的输出列名。当为 None 时,使用算法的名称。(默认值为 None)

  • directed (可选[布尔值]) – 在转换为igraph时,是否是有向的。如果为None,则尝试有向和无向。(默认值为None)

  • use_vids (bool) – 在转换为igraph时,是否将ID解释为igraph顶点ID(非负整数)或任意值(False,默认值)

  • params (dict) – 传递给底层igraph方法的任何命名参数

  • stringify_rich_types (bool) – 当返回像igraph.Graph这样的丰富类型时,可能会对下游渲染造成问题,将它们强制转换为字符串

  • self (Plottable)

Returns:

绘图仪

Return type:

绘图仪

Example: Pagerank
import graphistry, pandas as pd
edges = pd.DataFrame({'s': ['a','b','c','d'], 'd': ['c','c','e','e']})
g = graphistry.edges(edges, 's', 'd').materialize_nodes()
g2 = g.compute_igraph('pagerank')
assert 'pagerank' in g2._nodes.columns
Example: Pagerank with custom name
import graphistry, pandas as pd
edges = pd.DataFrame({'s': ['a','b','c','d'], 'd': ['c','c','e','e']})
g = graphistry.edges(edges, 's', 'd').materialize_nodes()
g2 = g.compute_igraph('pagerank', out_col='my_pr')
assert 'my_pr' in g2._nodes.columns
Example: Pagerank on an undirected
import graphistry, pandas as pd
edges = pd.DataFrame({'s': ['a','b','c','d'], 'd': ['c','c','e','e']})
g = graphistry.edges(edges, 's', 'd').materialize_nodes()
g2 = g.compute_igraph('pagerank', directed=False)
assert 'pagerank' in g2._nodes.columns
Example: Pagerank with custom parameters
import graphistry, pandas as pd
edges = pd.DataFrame({'s': ['a','b','c','d'], 'd': ['c','c','e','e']})
g = graphistry.edges(edges, 's', 'd').materialize_nodes()
g2 = g.compute_igraph('pagerank', params={'damping': 0.85})
assert 'pagerank' in g2._nodes.columns
Example: Personalized Pagerank
import graphistry, pandas as pd
edges = pd.DataFrame({'s': ['a','b','c','d'], 'd': ['c','c','e','e']})
g = graphistry.edges(edges, 's', 'd').materialize_nodes()
g2 = g.compute_igraph('personalized_pagerank')
assert 'personalized_pagerank' in g2._nodes.columns
graphistry.plugins.igraph.from_igraph(self, ig, node_attributes=None, edge_attributes=None, load_nodes=True, load_edges=True, merge_if_existing=True)#

将igraph对象转换为Plotter

如果基础 g 有 _node、_source、_destination 定义,请使用它们

当 merge_if_existing 与预先存在的节点/边 df 和形状匹配 ig 时,合并属性

为了使merge_if_existing能够处理边,必须设置g._edge并在igraph.Graph中具有相应的边索引属性。

Parameters:
  • ig (igraph) – 源 igraph 对象

  • node_attributes (可选[列表[字符串]]) – 要加载的节点属性子集;None 表示加载所有属性(默认)

  • edge_attributes (可选[列表[字符串]]) – 要加载的边属性子集;None 表示全部(默认)

  • load_nodes (bool) – 是否加载节点数据框(默认为 True)

  • load_edges (bool) – 是否加载边的数据框(默认为 True)

  • merge_if_existing (bool) – 是否与现有的节点/边数据框合并(默认为 True)

  • merge_if_existing – bool

Returns:

绘图仪

Return type:

Plottable

Example: Convert from igraph, including all node/edge properties
import graphistry, pandas as pd
edges = pd.DataFrame({'s': ['a', 'b', 'c', 'd'], 'd': ['b', 'c', 'd', 'e'], 'v': [101, 102, 103, 104]})
g = graphistry.edges(edges, 's', 'd').materialize_nodes().get_degrees()
assert 'degree' in g._nodes.columns
g2 = g.from_igraph(g.to_igraph())
assert len(g2._nodes.columns) == len(g._nodes.columns)
Example: Enrich from igraph, but only load in 1 node attribute
import graphistry, pandas as pd
edges = pd.DataFrame({'s': ['a', 'b', 'c', 'd'], 'd': ['b', 'c', 'd', 'e'], 'v': [101, 102, 103, 104]})
g = graphistry.edges(edges, 's', 'd').materialize_nodes().get_degree()
assert 'degree' in g._nodes
ig = g.to_igraph(include_nodes=False)
assert 'degree' not in ig.vs
ig.vs['pagerank'] = ig.pagerank()
g2 = g.from_igraph(ig, load_edges=False, node_attributes=[g._node, 'pagerank'])
assert 'pagerank' in g2._nodes
asssert 'degree' in g2._nodes
graphistry.plugins.igraph.layout_igraph(self, layout, directed=None, use_vids=False, bind_position=True, x_out_col='x', y_out_col='y', play=0, params={})#

使用igraph算法计算图形布局。有关布局的列表,请参见layout_algs或igraph文档。

Parameters:
  • 布局 (str) – igraph.Graph.layout 方法的名称,例如 sugiyama

  • directed (可选[布尔值]) – 在转换为igraph时,是否是有向的。如果为None,则尝试有向和无向。(默认值为None)

  • use_vids (bool) – 是否使用igraph顶点id(非负整数)或任意节点id(False,默认值)

  • bind_position (bool) – 是否调用 bind(point_x=, point_y=)(默认为 True)

  • x_out_col (str) – 写入x位置的属性。(默认值为‘x’)

  • y_out_col (str) – 用于写入x位置的属性。(默认值为‘y’)

  • play (可选[str]) – 如果定义,设置 settings(url_params={‘play’: play})。(默认值为 0)

  • params (dict) – 传递给底层igraph方法的任何命名参数

  • self (Plottable)

Returns:

绘图仪

Return type:

绘图仪

Example: Sugiyama layout
import graphistry, pandas as pd
edges = pd.DataFrame({'s': ['a','b','c','d'], 'd': ['b','c','d','e']})
g = graphistry.edges(edges, 's', 'd')
g2 = g.layout_igraph('sugiyama')
assert 'x' in g2._nodes
g2.plot()
Example: Change which column names are generated
import graphistry, pandas as pd
edges = pd.DataFrame({'s': ['a','b','c','d'], 'd': ['b','c','d','e']})
g = graphistry.edges(edges, 's', 'd')
g2 = g.layout_igraph('sugiyama', x_out_col='my_x', y_out_col='my_y')
assert 'my_x' in g2._nodes
assert g2._point_x == 'my_x'
g2.plot()
Example: Pass parameters to layout methods - Sort nodes by degree
import graphistry, pandas as pd
edges = pd.DataFrame({'s': ['a','b','c','d'], 'd': ['b','c','d','e']})
g = graphistry.edges(edges, 's', 'd')
g2 = g.get_degrees()
assert 'degree' in g._nodes.columns
g3 = g.layout_igraph('sugiyama', params={'layers': 'degree'})
g3.plot()
graphistry.plugins.igraph.to_igraph(self, directed=True, include_nodes=True, node_attributes=None, edge_attributes=None, use_vids=False)#

将当前项目转换为igraph图。请参阅from_igraph中的示例。

Parameters:
  • directed (bool) – 是否创建有向图(默认为 True)

  • include_nodes (bool) – 是否摄取节点表,如果它存在(默认为 True)

  • node_attributes (可选[列表[字符串]]) – 要加载的节点属性,None 表示全部(默认 None)

  • edge_attributes (可选[列表[字符串]]) – 要加载的边属性,None 表示加载所有(默认 None)

  • use_vids (bool) – 是否将ID解释为igraph顶点ID,这些ID必须是非负整数(默认值为False)

  • self (Plottable)

常量

graphistry.plugins.igraph.compute_algs: List[str] = ['articulation_points', 'authority_score', 'betweenness', 'bibcoupling', 'harmonic_centrality', 'closeness', 'clusters', 'cocitation', 'community_edge_betweenness', 'community_fastgreedy', 'community_infomap', 'community_label_propagation', 'community_leading_eigenvector', 'community_leiden', 'community_multilevel', 'community_optimal_modularity', 'community_spinglass', 'community_walktrap', 'constraint', 'coreness', 'gomory_hu_tree', 'harmonic_centrality', 'hub_score', 'eccentricity', 'eigenvector_centrality', 'k_core', 'pagerank', 'personalized_pagerank', 'spanning_tree']#

内置可变序列。

如果没有给出参数,构造函数将创建一个新的空列表。 如果指定了参数,则它必须是一个可迭代对象。

graphistry.plugins.igraph.layout_algs: List[str] = ['auto', 'automatic', 'bipartite', 'circle', 'circular', 'dh', 'davidson_harel', 'drl', 'drl_3d', 'fr', 'fruchterman_reingold', 'fr_3d', 'fr3d', 'fruchterman_reingold_3d', 'grid', 'grid_3d', 'graphopt', 'kk', 'kamada_kawai', 'kk_3d', 'kk3d', 'kamada_kawai_3d', 'lgl', 'large', 'large_graph', 'mds', 'random', 'random_3d', 'rt', 'tree', 'reingold_tilford', 'rt_circular', 'reingold_tilford_circular', 'sphere', 'spherical', 'circle_3d', 'circular_3d', 'star', 'sugiyama']#

内置可变序列。

如果没有给出参数,构造函数将创建一个新的空列表。 如果指定了参数,则它必须是一个可迭代对象。