如何用Sunburst或特色图表可视化API变更中破坏性变更的占比?
API变更占比可视化方案推荐
问题场景
现有如下结构的DataFrame:
id date API_changes count content 134 2019-01-01 2 NaN Nan 134 2019-02-05 34 12 API deleted 134 2019-02-12 18 8 Deprecation 134 2019-03-10 56 29 Segmentation Error 134 2019-05-12 75 40 Path deleted 134 2019-07-01 25 10 Type required 134 2019-10-09 137 55 API deprecated 134 2019-12-31 32 18 Media type removed 134 2020-01-03 150 99 Required param missing
需求为可视化count在API_changes中的占比(count代表对应日期提交中,API变更里的破坏性变更数量),此前使用散点图无法直观呈现不同日期的变更规模差异,考虑过堆叠条形图,希望优先尝试旭日图(Sunburst)或其他更独特的可视化方案。
可选可视化方案
1. 旭日图(Sunburst)
旭日图天生适合展示层级化占比关系,针对你的数据可以设计三层结构:
- 最外层:按日期分组,代表单次提交的总API变更规模(
API_changes) - 中间层:将每个日期的变更拆分为「破坏性变更(count)」和「非破坏性变更(API_changes - count)」两类
- 最内层:对破坏性变更进一步拆分,映射
content列的具体变更类型
实现前需预处理数据:
- 将
count为NaN的行填充为0(如2019-01-01的记录,标记为无破坏性变更) - 构造包含
parent、label、value的层级数据(适配主流可视化库的旭日图要求)
示例代码思路(基于Plotly):
import plotly.express as px import pandas as pd # 预处理数据 df['count'] = df['count'].fillna(0) df['non_destructive'] = df['API_changes'] - df['count'] # 构造旭日图层级数据集 sunburst_data = [] for _, row in df.iterrows(): # 添加日期总节点 sunburst_data.append({'parent': '', 'label': row['date'], 'value': row['API_changes']}) # 添加破坏性变更节点及对应类型 if row['count'] > 0: sunburst_data.append({'parent': row['date'], 'label': '破坏性变更', 'value': row['count']}) sunburst_data.append({'parent': '破坏性变更', 'label': row['content'], 'value': row['count']}) # 添加非破坏性变更节点 sunburst_data.append({'parent': row['date'], 'label': '非破坏性变更', 'value': row['non_destructive']}) # 生成并展示图表 sunburst_df = pd.DataFrame(sunburst_data) fig = px.sunburst(sunburst_df, names='label', parents='parent', values='value') fig.show()
2. 环形堆叠条形图(Donut Stacked Bar)
相比普通堆叠条形图,环形设计更具辨识度,同时保留日期维度的对比性:
- 每个环形条形的总长度对应当日
API_changes总数 - 环形的一段为
count(用不同颜色区分content类型),剩余部分为非破坏性变更 - X轴为日期,可直观对比不同日期的变更规模和破坏性变更占比
3. 百分比堆叠面积图
若需体现时间维度的趋势变化,该方案更合适:
- X轴为日期,Y轴为变更数量的占比
- 不同颜色的面积块对应
content中的各类破坏性变更,总面积高度对应当日API_changes总规模 - 既能看到整体变更规模的时间波动,也能清晰对比各类破坏性变更的占比趋势
内容的提问来源于stack exchange,提问作者Brie MerryWeather
相关产品推荐
相关产品推荐

