"new text" 标签随机出现在 Plotly 图中
"new text" label randomly appearing in Plotly graph
我使用 networkx
构建了一个图表,然后使用 plotly
将其可视化,如 official guide 中所述。但是,我在图表中随机得到了一个 "new text" 标签,原因不明。此标签不会出现在网络的某个特定区域中,而是取决于我缩放的位置(因此它可能出现在一个部分上,然后如果我缩放另一部分,它会出现在那里)。
我检查了所有标签(节点或边缘),但正如预期的那样没有问题。
我什至检查了代码中任何硬编码的 "new text" 部分,但一切看起来都很好。
这里可能是什么问题?
更新
下面是用于可视化它的代码:
import networkx
import plotly.graph_objs as go
# set node positions
pos = nx.nx_pydot.graphviz_layout(G2)
# Nodes information
node_x = []
node_y = []
node_labels = []
for key, value in pos.items():
x, y = value[0], value[1]
node_x.append(x)
node_y.append(y)
node_labels.append(key)
# Edges information
edge_x = []
edge_y = []
edge_labels = []
for edge in G2.edges().data():
x0, y0 = pos[edge[0]]
x1, y1 = pos[edge[1]]
edge_x.append(x0)
edge_x.append(x1)
edge_x.append(None)
edge_y.append(y0)
edge_y.append(y1)
edge_y.append(None)
# Get the edge label
label = [val for val in edge[2].values()]
# Get the middle line coordinates where edge's name is added
ax = (x0+x1)/2
ay = (y0+y1)/2
# Not all edges have a label
if len(label) > 0:
edge_labels.append((label[0], ax, ay))
else:
edge_labels.append((None, None, None))
# create node trace:
node_trace = go.Scatter( x=node_x, y=node_y, text = node_labels, textposition='bottom center',
mode='markers+text', hoverinfo='text', name = 'Nodes',
marker=dict( showscale=False,
# symbol='circle',
color='cyan',
size=15,
line=dict(color='rgb(180,255,255)', width=1))
)
# create edge trace:
edge_trace = go.Scatter( x=edge_x, y=edge_y,
mode = 'lines', line=dict(width=1, color='rgb(90, 90, 90)'),
hoverinfo='none',)
# Annotations for edge's labels
annotations_list = [
dict(
x = None if label[0] == None else label[1],
y = None if label[0] == None else label[2],
xref = 'x',
yref = 'y',
text = label[0],
showarrow=False,
opacity=0.7,
ax = label[1],
ay = label[2]
)
for label in edge_labels
]
data = [edge_trace, node_trace]
layout = go.Layout(
title='FOL Network Graph',
titlefont_size=20,
width = 700,
height = 600,
showlegend=False,
plot_bgcolor="rgb(255, 255, 250)",
hovermode='closest',
clickmode='event+select',
margin=dict(b=20,l=5,r=5,t=40),
annotations=annotations_list,
xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
yaxis=dict(showgrid=False, zeroline=False, showticklabels=False)
)
fig = go.Figure(data=data, layout=layout)
好的,所以我明白了。以防万一有人偶然发现这个问题,问题在于声明 annotations_list
变量,我实际上用它来指定边的标签。但是,正如您从代码中看到的那样,我只标记了一些边缘:
x = None if label[0] == None else label[1],
y = None if label[0] == None else label[2],
我在这里没有正确设置的是边缘 text = label[0]
的实际标签,它应该是 text = "" if label[0] == None else label[0]
。
如果注释的 text
字段设置为 None
.
,则默认情况下会设置 'new text' 标签
我使用 networkx
构建了一个图表,然后使用 plotly
将其可视化,如 official guide 中所述。但是,我在图表中随机得到了一个 "new text" 标签,原因不明。此标签不会出现在网络的某个特定区域中,而是取决于我缩放的位置(因此它可能出现在一个部分上,然后如果我缩放另一部分,它会出现在那里)。
我检查了所有标签(节点或边缘),但正如预期的那样没有问题。
我什至检查了代码中任何硬编码的 "new text" 部分,但一切看起来都很好。
这里可能是什么问题?
更新
下面是用于可视化它的代码:
import networkx
import plotly.graph_objs as go
# set node positions
pos = nx.nx_pydot.graphviz_layout(G2)
# Nodes information
node_x = []
node_y = []
node_labels = []
for key, value in pos.items():
x, y = value[0], value[1]
node_x.append(x)
node_y.append(y)
node_labels.append(key)
# Edges information
edge_x = []
edge_y = []
edge_labels = []
for edge in G2.edges().data():
x0, y0 = pos[edge[0]]
x1, y1 = pos[edge[1]]
edge_x.append(x0)
edge_x.append(x1)
edge_x.append(None)
edge_y.append(y0)
edge_y.append(y1)
edge_y.append(None)
# Get the edge label
label = [val for val in edge[2].values()]
# Get the middle line coordinates where edge's name is added
ax = (x0+x1)/2
ay = (y0+y1)/2
# Not all edges have a label
if len(label) > 0:
edge_labels.append((label[0], ax, ay))
else:
edge_labels.append((None, None, None))
# create node trace:
node_trace = go.Scatter( x=node_x, y=node_y, text = node_labels, textposition='bottom center',
mode='markers+text', hoverinfo='text', name = 'Nodes',
marker=dict( showscale=False,
# symbol='circle',
color='cyan',
size=15,
line=dict(color='rgb(180,255,255)', width=1))
)
# create edge trace:
edge_trace = go.Scatter( x=edge_x, y=edge_y,
mode = 'lines', line=dict(width=1, color='rgb(90, 90, 90)'),
hoverinfo='none',)
# Annotations for edge's labels
annotations_list = [
dict(
x = None if label[0] == None else label[1],
y = None if label[0] == None else label[2],
xref = 'x',
yref = 'y',
text = label[0],
showarrow=False,
opacity=0.7,
ax = label[1],
ay = label[2]
)
for label in edge_labels
]
data = [edge_trace, node_trace]
layout = go.Layout(
title='FOL Network Graph',
titlefont_size=20,
width = 700,
height = 600,
showlegend=False,
plot_bgcolor="rgb(255, 255, 250)",
hovermode='closest',
clickmode='event+select',
margin=dict(b=20,l=5,r=5,t=40),
annotations=annotations_list,
xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
yaxis=dict(showgrid=False, zeroline=False, showticklabels=False)
)
fig = go.Figure(data=data, layout=layout)
好的,所以我明白了。以防万一有人偶然发现这个问题,问题在于声明 annotations_list
变量,我实际上用它来指定边的标签。但是,正如您从代码中看到的那样,我只标记了一些边缘:
x = None if label[0] == None else label[1],
y = None if label[0] == None else label[2],
我在这里没有正确设置的是边缘 text = label[0]
的实际标签,它应该是 text = "" if label[0] == None else label[0]
。
如果注释的 text
字段设置为 None
.