如何用Altair实现Pandas列的交互式比例饼图及联动表格?
Altair饼图(带百分比hover)+ 选中联动表格解决方案
以下是完整的实现代码,包含百分比hover提示和饼扇选中联动表格的功能:
import pandas as pd import altair as alt # 1. 构造示例数据 data = pd.DataFrame({ 'Root Cause': ['硬件故障', '软件bug', '人为操作', '硬件故障', '软件bug', '硬件故障', '人为操作', '软件bug', '软件bug', '人为操作'], 'LocationName': ['机房A', '办公区B', '机房A', '办公区C', '机房A', '办公区B', '办公区C', '机房A', '办公区B', '机房A'] }) # 2. 统计根因类别数量与占比 summary = data.groupby('Root Cause').agg( count=('Root Cause', 'size') ).reset_index() summary['percentage'] = (summary['count'] / summary['count'].sum()).round(2) * 100 # 3. 创建选择器(单选,多选可改用selection_multi) root_cause_selector = alt.selection_single( fields=['Root Cause'], empty='all', # 默认显示全部数据 name='RootCauseSelect' ) # 4. 绘制饼图(环形图通过innerRadius设置) pie_chart = alt.Chart(summary).mark_arc(innerRadius=50).encode( theta=alt.Theta(field='count', type='quantitative', title='事件数量'), color=alt.Color(field='Root Cause', type='nominal', title='根因类型'), # hover提示:显示根因、数量、占比 tooltip=[ alt.Tooltip('Root Cause', title='根因类型'), alt.Tooltip('count', title='事件数量'), alt.Tooltip('percentage', title='占比', format='.1f%') ] ).add_selection(root_cause_selector) # 5. 绘制联动表格 detail_table = alt.Chart(data).mark_table( # 表格样式可选配置 header=alt.Header(labelFontWeight='bold'), cell=alt.Cell(align='left') ).encode( # 选中项高亮,未选中项半透明 opacity=alt.condition(root_cause_selector, alt.value(1), alt.value(0.2)) ).transform_filter( # 根据选择器过滤数据 root_cause_selector ) # 6. 组合饼图与表格(横向排列) pie_chart | detail_table
关键功能说明
- hover显示百分比:提前统计好每个类别的占比字段
percentage,在tooltip中直接调用并通过format='.1f%'格式化,确保hover时清晰显示百分比数值。 - 选中联动表格:
- 用
selection_single创建单选选择器,绑定Root Cause字段; - 表格通过
transform_filter筛选出选中根因对应的所有原始数据行; - 利用
opacity条件样式增强交互反馈:选中的行完全不透明,未选中的行半透明,直观区分状态。
- 用
- 环形图调整:通过
mark_arc(innerRadius=50)设置内半径,将饼图改为环形图,若要普通饼图去掉innerRadius参数即可。
内容的提问来源于stack exchange,提问作者Ananth
相关产品推荐
相关产品推荐

