in identity-resolution/notebooks/identity-graph/nepytune/drawing.py [0:0]
def scatters_by_label(graph, attrs_to_skip, sizes=None, colors=None):
if not colors:
colors = {}
if not sizes:
sizes = {}
for i, (label, node_group) in enumerate(group_by_label(graph)):
node_group = list(node_group)
node_x = []
node_y = []
opacity = []
size_list = []
for node_id, _ in node_group:
x, y = graph.node[node_id]["pos"]
opacity.append(graph.node[node_id].get("opacity", 1))
size_list.append(
graph.node[node_id].get("size", sizes.get(label, 10))
)
node_x.append(x)
node_y.append(y)
node_trace = go.Scatter(
x=node_x, y=node_y,
name=label,
mode='markers',
hoverinfo='text',
marker=dict(
showscale=False,
colorscale='Hot',
reversescale=True,
color=colors.get(label, i * 5),
opacity=opacity,
size=size_list,
line_width=2
)
)
node_text = []
def format_v(attr, value):
if isinstance(value, dict):
return "".join([format_v(k, str(v)) for k, v in value.items()])
value = str(value)
if len(value) < 80:
return f"</br>{attr}: {value}"
else:
result = f"</br>{attr}: "
substr = ""
for word in value.split(" "):
if len(word + substr) < 80:
substr = f"{substr} {word}"
else:
result = f"{result} </br> {5 * ' '} {substr}"
substr = ""
return f"{result} </br> {5 * ' '} {substr}"
for node_id, attr_dict in node_group:
node_text.append(
"".join([
format_v(attr, value) for attr, value in attr_dict.items()
if attr not in attrs_to_skip
])
)
node_trace.text = node_text
yield node_trace