Holoviews(v1.10.4) Sankey图节点样式修改问题求助
解决Holoviews 1.10.4 + Bokeh 0.12.16中Sankey节点样式不生效的问题
我太懂你这种明明设置了样式却没效果的挫败感了!在你用的这个旧版本组合里,直接通过.options(node_line_color='white')设置节点轮廓色确实会被忽略——这是因为Holoviews 1.10.4的Sankey组件并没有把node_line_color作为顶层参数支持,节点的样式需要针对它底层渲染的Rect(矩形)元素来指定。
正确的设置方式
你有两种可行的方案,选哪种都可以:
方案1:使用Holoviews的opts方法针对Rect元素设置
直接在代码里明确指定Sankey的节点(Rect元素)样式:
import pandas as pd import holoviews as hv hv.extension('bokeh') edges = pd.read_csv('data.csv') # 针对Rect元素设置线条颜色和宽度,确保效果明显 hv.Sankey(edges).opts( hv.opts.Rect(line_color='white', line_width=2) )
方案2:在Jupyter Notebook中用%%opts魔法命令
如果你用的是Notebook,魔法命令会更直观:
%%opts Sankey.Rect (line_color='white' line_width=2) import pandas as pd import holoviews as hv hv.extension('bokeh') edges = pd.read_csv('data.csv') hv.Sankey(edges)
为什么之前的设置无效?
node_width能生效是因为它是Sankey的布局参数,控制节点的宽度,属于顶层配置;- 而
node_line_color这类样式参数,在这个版本里并没有绑定到Sankey的顶层选项中,节点实际上是作为独立的Rect图形元素渲染的,所以必须直接给Rect设置样式。
额外的样式扩展
如果你还想调整节点的填充色、透明度等,同样可以加到Rect的设置里:
hv.Sankey(edges).opts( hv.opts.Rect( line_color='white', line_width=2, fill_color='#88c999', alpha=0.8 ) )
顺便提一句,如果你后续升级到Holoviews 2.x及以上版本,就可以直接用node_line_color这类更直观的参数了,但在当前的旧版本里,上面的方法是最可靠的。
内容的提问来源于stack exchange,提问作者exwhyz
相关产品推荐
相关产品推荐

