如何修改用Holoviews/Bokeh绘制的NetworkX图的节点颜色?
修改Holoviews Graph单个节点颜色的方法
嘿,我来帮你搞定修改单个节点颜色的问题!在Holoviews里,咱们有两种简单的方式实现这个需求,下面给你具体演示:
方法一:直接生成颜色列表指定
咱们可以先创建一个和节点顺序对应的颜色列表,把目标节点设为你想要的颜色,其他节点用默认颜色,然后通过node_color参数传递给Graph的配置:
%pylab inline import pandas as pd import networkx as nx import holoviews as hv hv.extension('bokeh') G = nx.Graph() ndxs = [1,2,3,4] G.add_nodes_from(ndxs) G.add_weighted_edges_from([(1,2,0), (1,3,1), (1,4,-1), (2,4,1), (2,3,-1), (3,4,10)]) # 自定义节点颜色:这里把节点1设为红色,其他用蓝色 node_colors = ['red' if node == 1 else 'blue' for node in G.nodes()] hv.extension('bokeh') # 在opts里指定node_color为咱们定义的颜色列表 %opts Graph [width=400 height=400 node_color=node_colors] padding = dict(x=(-1.1, 1.1), y=(-1.1, 1.1)) hv.Graph.from_networkx(G, nx.layout.spring_layout).redim.range(**padding)
方法二:给节点添加颜色属性(更灵活)
如果后续需要根据节点的不同属性动态调整颜色,咱们可以给NetworkX的节点直接添加颜色属性,然后让Holoviews根据这个属性来着色:
%pylab inline import pandas as pd import networkx as nx import holoviews as hv hv.extension('bokeh') G = nx.Graph() ndxs = [1,2,3,4] G.add_nodes_from(ndxs) G.add_weighted_edges_from([(1,2,0), (1,3,1), (1,4,-1), (2,4,1), (2,3,-1), (3,4,10)]) # 给每个节点添加color属性,节点1设为红色,其他为蓝色 for node in G.nodes(): G.nodes[node]['color'] = 'red' if node == 1 else 'blue' hv.extension('bokeh') # 通过color_index指定使用节点的color属性来着色 %opts Graph [width=400 height=400 color_index='color'] padding = dict(x=(-1.1, 1.1), y=(-1.1, 1.1)) hv.Graph.from_networkx(G, nx.layout.spring_layout).redim.range(**padding)
两种方法都能实现单个节点颜色的修改,你可以根据自己的需求选择。如果需要更多配色,也可以替换成十六进制颜色码(比如#FF5733)或者Holoviews支持的其他颜色名称哦~
内容的提问来源于stack exchange,提问作者Soerendip
相关产品推荐
相关产品推荐

