欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Pyecharts之关系图(Graph)

程序员文章站 2022-03-03 14:37:18
...

Pyecharts之关系图(Graph)

from snapshot_selenium import snapshot as driver

from pyecharts import options as opts
from pyecharts.charts import Graph
from pyecharts.render import make_snapshot
from pyecharts.globals import CurrentConfig,NotebookType

CurrentConfig.NOTEBOOK_TYPE=NotebookType.JUPYTER_LAB

一.基本概念

class pyecharts.charts.Graph

class Graph(
    # 初始化配置项,参考 `global_options.InitOpts`
    init_opts: opts.InitOpts = opts.InitOpts()
)

class pyecharts.charts.Graph.add

def add(
    # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
    series_name: str,

    # 关系图节点数据项列表,参考 `opts.GraphNode`
    nodes: Sequence[Union[opts.GraphNode, dict]],

    # 关系图节点间关系数据项列表,参考 `opts.GraphLink`
    links: Sequence[Union[opts.GraphLink, dict]],

    # 关系图节点分类的类目列表,参考 `opts.GraphCategory`
    categories: Union[Sequence[Union[opts.GraphCategory, dict]], None] = None,

    # 是否选中图例。
    is_selected: bool = True,

    # 是否在鼠标移到节点上的时候突出显示节点以及节点的边和邻接节点。
    is_focusnode: bool = True,

    # 是否开启鼠标缩放和平移漫游。
    is_roam: bool = True,

    # 节点是否可拖拽,只在使用力引导布局的时候有用。
    is_draggable: bool = False,

    # 是否旋转标签,默认不旋转。
    is_rotate_label: bool = False,

    # 图的布局。可选:
    # 'none' 不采用任何布局,使用节点中提供的 x, y 作为节点的位置。
    # 'circular' 采用环形布局。
    # 'force' 采用力引导布局。
    layout: str = "force",

    # 关系图节点标记的图形。
    # ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 
    # 'diamond', 'pin', 'arrow', 'none'
    # 可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。
    symbol: Optional[str] = None,

    # 关系图节点标记的大小
    # 可以设置成诸如 10 这样单一的数字
    # 也可以用数组分开表示宽和高,例如 [20, 10] 表示标记宽为20,高为10。
    symbol_size: types.Numeric = 10,

    # 边的两个节点之间的距离,这个距离也会受 repulsion。
    # 支持设置成数组表达边长的范围,此时不同大小的值会线性映射到不同的长度。值越小则长度越长。
    edge_length: Numeric = 50,

    # 节点受到的向中心的引力因子。该值越大节点越往中心点靠拢。
    gravity: Numeric = 0.2,

    # 节点之间的斥力因子。
    # 支持设置成数组表达斥力的范围,此时不同大小的值会线性映射到不同的斥力。值越大则斥力越大
    repulsion: Numeric = 50,

     # Graph 图节点边的 Label 配置(即在边上显示数据或标注的配置)
    edge_label: types.Label = None,

    # 边两端的标记类型,可以是一个数组分别指定两端,也可以是单个统一指定。
    # 默认不显示标记,常见的可以设置为箭头,如下:edgeSymbol: ['circle', 'arrow']
    edge_symbol: Optional[str] = None,

    # 边两端的标记大小,可以是一个数组分别指定两端,也可以是单个统一指定。
    edge_symbol_size: Numeric = 10,

    # 标签配置项,参考 `series_options.LabelOpts`
    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),

    # 关系边的公用线条样式。
    linestyle_opts: Union[opts.LineStyleOpts, dict] = opts.LineStyleOpts(),

    # 提示框组件配置项,参考 `series_options.TooltipOpts`
    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,

    # 图元样式配置项,参考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)

二.代码示例

from pyecharts.charts import Graph
from pyecharts import options as opts

nodes = [
    {"name": "结点1", "symbolSize": 10},
    {"name": "结点2", "symbolSize": 20},
    {"name": "结点3", "symbolSize": 30},
    {"name": "结点4", "symbolSize": 40},
    {"name": "结点5", "symbolSize": 50},
    {"name": "结点6", "symbolSize": 40},
    {"name": "结点7", "symbolSize": 30},
    {"name": "结点8", "symbolSize": 20},
]
links = []
for i in nodes:
    for j in nodes:
        links.append({"source": i.get("name"), "target": j.get("name")})

g = (
    Graph()
    .add("", nodes, links, repulsion=8000)
    .set_global_opts(title_opts=opts.TitleOpts(title="Graph-基本示例"))
    #.render("graph_base.html")
)

#make_snapshot(driver,g.render("gauge.html"),"gauge.png")
g.load_javascript()
g.render_notebook()
from pyecharts import options as opts
from pyecharts.charts import Graph

nodes_data = [
    opts.GraphNode(name="结点1", symbol_size=10),
    opts.GraphNode(name="结点2", symbol_size=20),
    opts.GraphNode(name="结点3", symbol_size=30),
    opts.GraphNode(name="结点4", symbol_size=40),
    opts.GraphNode(name="结点5", symbol_size=50),
    opts.GraphNode(name="结点6", symbol_size=60),
]
links_data = [
    opts.GraphLink(source="结点1", target="结点2", value=2),
    opts.GraphLink(source="结点2", target="结点3", value=3),
    opts.GraphLink(source="结点3", target="结点4", value=4),
    opts.GraphLink(source="结点4", target="结点5", value=5),
    opts.GraphLink(source="结点5", target="结点6", value=6),
    opts.GraphLink(source="结点6", target="结点1", value=7),
]
c = (
    Graph()
    .add(
        "",
        nodes_data,
        links_data,
        repulsion=4000,
        edge_label=opts.LabelOpts(
            is_show=True, position="middle", formatter="{b} 的数据 {c}"
        ),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Graph-GraphNode-GraphLink-WithEdgeLabel")
    )
    #.render("graph_with_edge_options.html")
)
#make_snapshot(driver,g.render("gauge.html"),"gauge.png")
c.load_javascript()
c.render_notebook()
from pyecharts import options as opts
from pyecharts.charts import Graph

nodes = [
    opts.GraphNode(name="结点1", symbol_size=10),
    opts.GraphNode(name="结点2", symbol_size=20),
    opts.GraphNode(name="结点3", symbol_size=30),
    opts.GraphNode(name="结点4", symbol_size=40),
    opts.GraphNode(name="结点5", symbol_size=50),
]
links = [
    opts.GraphLink(source="结点1", target="结点2"),
    opts.GraphLink(source="结点2", target="结点3"),
    opts.GraphLink(source="结点3", target="结点4"),
    opts.GraphLink(source="结点4", target="结点5"),
    opts.GraphLink(source="结点5", target="结点1"),
]
c = (
    Graph()
    .add("", nodes, links, repulsion=4000)
    .set_global_opts(title_opts=opts.TitleOpts(title="Graph-GraphNode-GraphLink"))
    #.render("graph_with_options.html")
)
# make_snapshot(driver,g.render("gauge.html"),"gauge.png")
c.load_javascript()
c.render_notebook()

相关标签: pyecharts