如何将路径-大小列表转换为DataFrame并绘制Plotly旭日图
路径-大小数据转DataFrame并绘制Plotly旭日图
1. 将原始数据转换为层级化DataFrame
你的数据每行包含路径和对应大小,我们可以直接拆分路径为层级节点,构建适配Plotly的DataFrame。Python实现代码如下:
import pandas as pd import plotly.express as px # 原始数据行 raw_data = [ "foo0/bar0/a0/b0/c0 50", "foo0/bar0/a0/b1 30", "foo1/bar0/a0/b0 10", "foo1/bar1 20", "foo1/bar2/a0/b0/c0 20", "foo1/bar2/a0/b0/c1 30" ] # 拆分路径与大小,整理为层级列表+大小的结构 processed_data = [] for line in raw_data: path_str, size_str = line.split() # 按斜杠拆分路径为层级节点 hierarchy_nodes = path_str.split('/') processed_data.append({'hierarchy': hierarchy_nodes, 'size': int(size_str)}) # 转换为DataFrame df = pd.DataFrame(processed_data)
2. 绘制旭日图
Plotly的sunburst函数支持直接传入包含层级列表的列,无需将每个层级拆分为单独的DataFrame列:
# 以层级列表为路径,size为数值绘制旭日图 fig = px.sunburst(df, path='hierarchy', values='size') fig.show()
可选:拆分层级为单独列(适配复杂自定义需求)
如果需要对特定层级做筛选、重命名等操作,可以将路径拆分为多列,补全短路径的空白层级:
# 计算最长路径的层级数 max_hierarchy_depth = max(len(line.split('/')) for line in raw_data) processed_data = [] for line in raw_data: path_str, size_str = line.split() hierarchy_nodes = path_str.split('/') # 补全到最大层级数,空白位置用None填充 hierarchy_nodes += [None] * (max_hierarchy_depth - len(hierarchy_nodes)) processed_data.append(hierarchy_nodes + [int(size_str)]) # 生成带独立层级列的DataFrame column_names = [f'level_{i+1}' for i in range(max_hierarchy_depth)] + ['size'] df = pd.DataFrame(processed_data, columns=column_names) # 绘制旭日图 fig = px.sunburst(df, path=column_names[:-1], values='size') fig.show()
内容的提问来源于stack exchange,提问作者jkang
相关产品推荐
相关产品推荐

