[英]NetworkX Plot Titles - Interactive Plots
我一直在關注可視化多重共線性的教程,並一直在構建交互式網絡圖。 我想為 plot 添加一個標題,我發現這個SO question我認為這會有所幫助,但它與交互式 plot 無關,當我嘗試答案時,我最終得到了相同的交互式圖表,沒有標題,並且然后是一個小的空的非交互式 plot 下面有一個標題。
我的代碼目前看起來像:
plt.title('Network Graph Showing Correlated Metabolites at Adjustable Correlation Thresholds')
threshold_choice = widgets.FloatSlider(description="Threshold", value=0.8, min=0.1, max=1, step=0.05,
continuous_update=False, orientation='horizontal', layout=Layout(width='500px'),
style=dict(description_width= 'initial'))
network = go.FigureWidget(data=[go.Scatter(x=[], y=[], mode='lines', text=[], line=dict(color='#cc78bc', width=2.5),
marker=dict(size=16, line_width=5,line=dict(color='#cc78bc',width=2))),
go.Scatter(x=[], y=[],mode='markers+text', textposition="top center", text=[],
hoverinfo='text',textfont_size=12, marker=dict(size=10, color=[],line_width=1))],
layout=go.Layout( showlegend=False, annotations=[], margin=dict(t=40, b=0, l=0, r=0),
width=950, height=800))
df = AlzZ.copy()
correlation_matrix = cor.to_numpy()
def plot_corr_graph(change):
threshold, corr_mode = None, None
threshold = change.new
tr_ind = np.triu_indices(correlation_matrix.shape[0])
correlation_matrix[tr_ind] = 0
G = nx.from_numpy_matrix(correlation_matrix)
G = nx.relabel_nodes(G, lambda x: df.columns.tolist()[x])
remove = []
for col1, col2, weight in G.edges(data=True):
if math.isnan(weight["weight"]):
remove.append((col1,col2))
if abs(weight["weight"]) < threshold:
remove.append((col1,col2))
G.remove_edges_from(remove)
remove = []
edges = list(sum(G.edges, ()))
for node in G.nodes:
if node not in edges:
remove.append(node)
G.remove_nodes_from(remove)
mst = nx.maximum_spanning_tree(G)
def assign_color(col):
return colorlistMCLN
def assign_color_edge(correlation):
if correlation < 0:
return "#BF0603"
else:
return "#00CC66"
edge_colors = []
node_colors = []
for key, value in nx.get_edge_attributes(mst, 'weight').items():
edge_colors.append(assign_color_edge(value))
for key, value in dict(mst.degree).items():
node_colors.append(assign_color(key))
labels = {n:n for n in mst.nodes()}
node_x = []
node_y = []
tree = nx.fruchterman_reingold_layout(mst, k=0.25).items()
for node, (x_,y_) in tree:
node_x.append(x_)
node_y.append(y_)
def get_dim_of_node(name):
for node, (x,y) in tree:
if node == name:
return x,y
edge_x = []
edge_y = []
weights= []
for node1, node2, w in mst.edges(data=True):
x0, y0 = get_dim_of_node(node1)
x1, y1 = get_dim_of_node(node2)
edge_x.append(x0)
edge_x.append(x1)
edge_x.append(None)
edge_y.append(y0)
edge_y.append(y1)
edge_y.append(None)
weights.append((round(w["weight"],1), (x0+x1)/2, (y0+y1)/2))
with network.batch_update():
network.data[1].x = node_x
network.data[1].y = node_y
network.data[1].text = list(labels)
network.data[1].marker.color = node_colors
network.data[0].x = edge_x
network.data[0].y = edge_y
network.data[0].text = list(weights)
network.update_layout(xaxis_zeroline=False, yaxis_zeroline=False, xaxis_showgrid=False, yaxis_showgrid=False,
plot_bgcolor='rgba(0,0,0,0)')
threshold_choice.observe(plot_corr_graph, names="value")
widgets.VBox([threshold_choice, network])
我的 output 看起來像: output 圖像
我也試過把
plt.title('title')
在 threshold_choice object 和網絡 object 之間,並嘗試過
ax = plt.gca()
ax.set_title('title')
在correlation_matrix object下方 - 結果相同。
當我將它放在 function 中,低於閾值 object 時,它沒有產生任何帶有標題的圖,只是原始網絡圖。
我想通了:
問題是從代碼的角度來看,交互式圖實際上根本不是 plot。 它是一個FigureWidget 。 了解這一點可以更輕松地找到正確的文檔。
最初我一直在看這里: NetworkX Documentation
但是,您實際上需要查看 plotly 文檔中的此頁面。
在上面的示例中(在問題中),這意味着將網絡 object 更改為:
network = go.FigureWidget(data=[go.Scatter(x=[], y=[], mode='lines', text=[], line=dict(color='#cc78bc', width=2.5),
marker=dict(size=16, line_width=5,line=dict(color='#cc78bc',width=2))),
go.Scatter(x=[], y=[],mode='markers+text', textposition="top center", text=[],
hoverinfo='text',textfont_size=12, marker=dict(size=10, color=[],line_width=1))],
layout=go.Layout(showlegend=False, annotations=[], margin=dict(t=40, b=0, l=0, r=0),
width=950, height=800, title='Network Graph Showing Correlated Metabolites at Adjustable Correlation Thresholds'))
標題作為title='your title'
包含在布局參數中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.