如何调整Plotly Treemap中的矩形排序与布局?
解决方案
要实现你想要的Treemap布局,需要从调整节点排序逻辑和修改层级结构两方面入手,以下是具体修改方案:
1. 让“O”置于“U”上方
Plotly Treemap在节点数值相同时,会按照labels列表中的顺序排列节点。因此我们可以:
- 保持“O”在
labels中的位置先于“U” - 给两者设置相同的
values,确保面积一致,从而让O自然排在U上方
2. 让“UR”成为独立列
原来的结构中“UR”是“9”的子节点,和“NA”(“10”的子节点)共享父节点“9”“10”的横向空间。要让UR独立成列,只需将其直接设为“DR”的子节点,与“9”“10”同级,这样它会占据DR下的独立列区域。
修改后的完整代码
import plotly.graph_objects as go fig = go.Figure(go.Treemap( labels = ["DR","1,2","D 1","D 2","O","U", "3,4,5","P","B","Pe", "6,7,8","F","C","Pl", "9","UR", "10","NA"], parents = ["", "DR", "1,2","1,2","1,2","1,2","DR","3,4,5","3,4,5","3,4,5", "DR","6,7,8","6,7,8","6,7,8", "DR","DR", # 修改UR的父节点为DR,使其成为DR的直接子节点 "DR","10"], values = [100, 20, 5,5,5,5, # 给O和U设置相同数值,保证面积一致 20,5,5,10, 20,5,5,10, 10,10, # 给9、UR设置相同数值,确保独立列宽度一致 10,10], marker_colors = ["lightgrey", "lightblue", "cornflowerblue", "cornflowerblue","goldenrod","green", "lightblue","lightgray","chocolate","cadetblue", "lightblue","grey",'chocolate',"saddlebrown", "salmon","salmon", "burlywood","burlywood", ], branchvalues="total" )) fig.update_layout(margin = dict(t=10, l=60, r=25, b=30)) fig.show()
关键修改说明
parents列表中,将UR的父节点从"9"改为"DR",使其成为DR的直接子节点,获得独立列空间- 添加
values参数,给O和U设置相同数值(5),保证两者面积相同,Plotly会按labels顺序排列O在U上方;同时给9、UR、10设置相同数值(10),让这三列宽度一致
内容的提问来源于stack exchange,提问作者Stephanie Galvão
相关产品推荐
相关产品推荐

