pyvis.network生成的HTML无法占满浏览器窗口,求解决方法及替代库
解决Pyvis网络可视化全屏显示问题
针对Pyvis的修复方案
你遇到的问题核心在于notebook=True会给生成的HTML套上适配Jupyter Notebook的容器样式,且百分比高度依赖父元素尺寸设置。可以试试以下几种方法:
1. 改用视口单位替代百分比
将height和width设为100vh和100vw(视口高度/宽度的100%),这种单位不依赖父元素尺寸,直接基于浏览器窗口:
import networkx as nx from pyvis.network import Network G = nx.Graph() G.add_nodes_from([1,2,3]) G.add_edges_from([(1,2), (1,3)]) # 关闭notebook参数,改用视口单位 net = Network(height="100vh", width="100vw", directed=True, notebook=False) net.from_nx(G) net.show("simple_fullscreen.html")
2. 自定义CSS强制全屏
如果仍有问题,可通过set_options添加自定义CSS,强制容器和根元素占满屏幕:
import networkx as nx from pyvis.network import Network G = nx.Graph() G.add_nodes_from([1,2,3]) G.add_edges_from([(1,2), (1,3)]) net = Network(height="100%", width="100%", directed=True, notebook=False) net.from_nx(G) # 添加自定义样式,确保html、body和容器无内外边距且占满全屏 net.set_options(""" { "layout": { "hierarchical": false }, "nodes": { "shape": "dot" }, "edges": { "color": "#999" }, "physics": { "enabled": true }, "css": "html, body { height: 100%; margin: 0; padding: 0; } #mynetwork { height: 100% !important; width: 100% !important; }" } """) net.show("simple_fullscreen.html")
3. 关闭notebook模式
notebook=True是专为Jupyter环境设计的,会生成适配Notebook的iframe和样式。如果是在普通浏览器打开HTML文件,务必将该参数设为False。
替代可视化库推荐
如果Pyvis的适配仍达不到需求,可试试这些更适合全屏交互的库:
Plotly:支持交互式网络可视化,自带全屏按钮,缩放、拖拽体验流畅,响应式表现优秀。示例代码:
import networkx as nx import plotly.graph_objects as go G = nx.Graph() G.add_nodes_from([1,2,3]) G.add_edges_from([(1,2), (1,3)]) pos = nx.spring_layout(G) edge_x = [] edge_y = [] for edge in G.edges(): x0, y0 = pos[edge[0]] x1, y1 = pos[edge[1]] edge_x.extend([x0, x1, None]) edge_y.extend([y0, y1, None]) edge_trace = go.Scatter( x=edge_x, y=edge_y, line=dict(width=0.5, color='#888'), hoverinfo='none', mode='lines') node_x = [pos[node][0] for node in G.nodes()] node_y = [pos[node][1] for node in G.nodes()] node_trace = go.Scatter( x=node_x, y=node_y, mode='markers', hoverinfo='text', marker=dict(showscale=True, colorscale='YlGnBu', size=10)) fig = go.Figure( data=[edge_trace, node_trace], layout=go.Layout( showlegend=False, hovermode='closest', margin=dict(b=20,l=5,r=5,t=40), xaxis=dict(showgrid=False, zeroline=False), yaxis=dict(showgrid=False, zeroline=False)) ) fig.write_html("plotly_fullscreen.html")ipycytoscape:基于Cytoscape.js的Jupyter交互式库,支持全屏显示,节点样式和布局高度可定制,适合Notebook环境使用。
NetworkX + Matplotlib:如果只需要静态全屏图,可设置Matplotlib画布尺寸匹配屏幕分辨率:
import networkx as nx import matplotlib.pyplot as plt G = nx.Graph() G.add_nodes_from([1,2,3]) G.add_edges_from([(1,2), (1,3)]) # 按屏幕分辨率设置画布尺寸(示例为1920*1080) plt.figure(figsize=(19.2, 10.8), dpi=100) nx.draw(G, with_labels=True) plt.savefig("fullscreen_static.png", bbox_inches='tight') plt.show()
内容的提问来源于stack exchange,提问作者user3732793
相关产品推荐
相关产品推荐

