我正在尝试使用 Plotlys 树图可视化调用堆栈。我有一个 Pandas 数据框,其中包含“函数名称”、“调用函数的父 ID”、“持续时间”列。
在显示树形图时,我期望有一个根“Main”函数,它基本上包含其余的嵌套函数。相反,我得到一个包含“函数 H”的“主”函数,然后是第二个根节点“函数 H”,其标签和持续时间与其子节点相同。这是针对所有节点的。
为什么“Function H”的子节点不是“Main”中的原始节点?
我有以下代码可以在 Jupyther Lab 中运行:
import plotly.express as px
import pandas as pd
data = {'parent': ['Function A', 'Function A', 'Function A', 'Function A', 'Function A', 'Function A', 'Function B', 'Function B', 'Function B', 'Function B', 'Function C', 'Function C', 'Function D', 'Function E', 'Function F', 'Main', 'Function H', 'Function H', 'Function H', 'Function H', 'Function F', 'Function A', 'Function H', 'Function B'],
'function': ['Function C', 'Function D', 'Function F', 'Function I', 'Function J', 'Function K', 'Function A', 'Function L', 'Function M', 'Function N', 'Function C', 'Function O', 'Function P', 'Function Q', 'Function C', 'Function H', 'Function B', 'Function R', 'Function D', 'Function E', 'Other', 'Other', 'Other', 'Other'],
'duration': [3.0, 1.0, 169.0, 8.0, 3.0, 29.0, 272.0, 6.0, 7.0, 4.0, 60.0, 60.0, 3.0, 1.0, 60.0, 1100.0, 636.0, 10.0, 3.0, 1.0, 109.0, 59.0, 450.0, 347.0]}
df = pd.DataFrame(data)
print(df)
pd.set_option('display.max_colwidth', None)
pd.set_option('display.expand_frame_repr', False)
fig = px.treemap(df, path=['parent', 'function'], values='duration')
fig.update_traces(root_color="lightgrey")
fig.update_traces(marker=dict(cornerradius=5))
fig.show()
我已经尝试添加一个根节点,然后也将其添加到路径中,但这并没有真正改变任何东西。
我真的不需要在树图中显示数据,我只是找不到任何其他以嵌套方式显示数据的数据,持续时间按大小显示。
所以我要么在寻找一个修复程序来按照我想要的方式显示树状图,要么寻找另一种可以显示带有权重信息的嵌套数据的图表类型。
我认为这样做的原因是数据结构不是树结构,如果你删除主行并将整个规范添加到路径规范中,你会得到预期的结果。 详情请查看参考资料.
import plotly.express as px
df = pd.DataFrame(data)
df = df[df['parent'] != 'Main']
fig = px.treemap(df, path=[px.Constant('Main'), 'parent', 'function'], values='duration')
fig.update_traces(root_color="lightgrey")
fig.update_traces(marker=dict(cornerradius=5))
fig.show()