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()