Plotly Sankey图链接颜色渐变配置异常问题求助
问题:Plotly Sankey图链接颜色渐变未生效,全部显示默认浅灰色
我希望为Sankey图的链接应用颜色渐变效果,要求第一个链接为黄色、最后一个链接为蓝色,中间链接使用YlGnBu颜色渐变。以下是我的代码:
import plotly.graph_objects as go fig = go.Figure(go.Sankey( arrangement = "snap", node = { "label": names, 'pad':10, 'color':'lightgray' }, link = { "source": sources, "target": targets, "value": values, 'colorscales' : [{'colorscale':'YlGnBu'}] } )) fig.show()
Sankey图可正常显示且无报错,但所有链接均为默认浅灰色,请问问题出在哪里?感谢帮助。
解答
我来帮你排查这个问题!你遇到的问题是因为Plotly Sankey组件的颜色渐变参数使用有误,具体原因和修正方案如下:
问题根源
你代码里用了colorscales(复数)这个不存在的参数,而且没有为链接提供颜色映射的数值依据——Plotly需要知道用什么数值来对应渐变的颜色区间,否则会直接使用默认的浅灰色。
修正方案
要实现你想要的YlGnBu渐变效果(第一个链接黄,最后一个链接蓝),需要调整link字典里的参数:
- 使用**单数形式的
colorscale**指定渐变方案 - 通过
color参数提供一组数值,让Plotly根据这些数值映射颜色(可以用链接的values,也可以自定义索引数组) - 可选:用
cmin和cmax固定渐变的范围,确保首尾链接对应渐变的两端
修改后的完整代码
import plotly.graph_objects as go # 假设你已经定义了names, sources, targets, values变量 fig = go.Figure(go.Sankey( arrangement = "snap", node = { "label": names, 'pad':10, 'color':'lightgray' }, link = { "source": sources, "target": targets, "value": values, # 用链接的索引作为颜色映射值,确保第一个链接对应最小值(黄),最后一个对应最大值(蓝) "color": list(range(len(values))), # 指定YlGnBu渐变方案 "colorscale": "YlGnBu", # 明确设置颜色范围,固定渐变的首尾对应值 "cmin": 0, "cmax": len(values)-1 } )) fig.show()
额外说明
如果你想基于链接的value大小来映射颜色(值越小越黄,值越大越蓝),只需要把color参数改成values即可:
"color": values, "cmin": min(values), "cmax": max(values)
这样修改后,你的Sankey链接就会呈现从黄色到蓝色的YlGnBu渐变效果啦!
内容的提问来源于stack exchange,提问作者A. A. Pedersen
相关产品推荐
相关产品推荐

