mirror of https://github.com/dnomd343/klotski.git
1 changed files with 62 additions and 0 deletions
@ -0,0 +1,62 @@ |
|||
#!/usr/bin/env python3 |
|||
|
|||
import numpy as np |
|||
import igraph as ig |
|||
import plotly.graph_objs as go |
|||
import matplotlib.colors as mcolors |
|||
|
|||
|
|||
def build_colors(max_step: int) -> list[str]: |
|||
bwr = ['#0000ff', '#e8daef', '#ff0000'] |
|||
cmap = mcolors.LinearSegmentedColormap.from_list('custom_bwr', bwr) |
|||
return [mcolors.to_hex(cmap(x)) for x in np.linspace(0, 1, max_step + 1)] |
|||
|
|||
|
|||
def build_3d_graph(graph: ig.Graph, colors: list[str], output: str) -> None: |
|||
layout = graph.layout('kk', dim=3) |
|||
|
|||
Xn = [x[0] for x in layout] |
|||
Yn = [x[1] for x in layout] |
|||
Zn = [x[2] for x in layout] |
|||
|
|||
Xe, Ye, Ze = [], [], [] |
|||
for x, y in graph.get_edgelist(): |
|||
Xe += [layout[x][0], layout[y][0], None] |
|||
Ye += [layout[x][1], layout[y][1], None] |
|||
Ze += [layout[x][2], layout[y][2], None] |
|||
|
|||
edge_trace = go.Scatter3d( |
|||
x=Xe, y=Ye, z=Ze, |
|||
mode='lines', |
|||
line=dict(color='gray', width=2), |
|||
hoverinfo='none' |
|||
) |
|||
|
|||
node_trace = go.Scatter3d( |
|||
x=Xn, y=Yn, z=Zn, |
|||
mode='markers', |
|||
marker=dict( |
|||
symbol='circle', |
|||
size=6, |
|||
color=[colors[x['step']] for x in graph.vs] |
|||
), |
|||
hoverinfo='text', |
|||
text=[f'{x['tag']} ({x['step']}) [{'/'.join(x['codes'])}]' for x in graph.vs] |
|||
) |
|||
|
|||
fig = go.Figure(data=[edge_trace, node_trace]) |
|||
fig.update_layout( |
|||
showlegend=False, |
|||
margin=dict(l=0, r=0, b=0, t=0), |
|||
scene=dict( |
|||
xaxis=dict(showbackground=False), |
|||
yaxis=dict(showbackground=False), |
|||
zaxis=dict(showbackground=False), |
|||
) |
|||
) |
|||
fig.write_html(output) |
|||
|
|||
|
|||
if __name__ == '__main__': |
|||
g = ig.Graph.Read_Pickle('1-00M-000X_DAAF4CC-core.pkl') |
|||
build_3d_graph(g, build_colors(93), '1-00M-000X_3d-core.html') |
Loading…
Reference in new issue