You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Altair在同一水平条形图中绘制同数据框的两个变量

如何使用Altair在同一水平条形图中绘制同一数据框中的两个变量?

问题背景

你现有如下Pandas DataFrame:

# initialize list of lists
data = [['AAA','71.15','FOUSA06C1Y'],
['AA','2.93','FOUSA06C1Y'],
['A','11.9','FOUSA06C1Y'],
['BBB','14.04','FOUSA06C1Y'],
['BB','0.0','FOUSA06C1Y'],
['B','0.0','FOUSA06C1Y'],
['Below B','0.0','FOUSA06C1Y'],
['Not Rated','-0.02','FOUSA06C1Y'],
['AAA','34.81744518','1404'],
['AA','47.24845367','1404'],
['A','16.66257244','1404'],
['BBB','1.271528716','1404'],
['BB / B','0.0','1404'],
['Below B','0.0','1404'],
['Short Term Rated','0.0','1404'],
['Not Rated','0.0','1404'],
['Nan','0.0','1404']]
  
# Create the pandas DataFrame
df = pd.DataFrame(data, columns=['index', 'value','fund'])

df['value'] = df['value'].astype(float)

当前你用以下代码绘制的是分开展示的两个图表,希望将同一index对应的不同fund条形放在同一水平图中,形成分组展示效果:

gp_chart = alt.Chart(df).mark_bar().encode(
    alt.X('value'),
    alt.Y('index', axis=alt.Axis(grid=True)), 
    alt.Color('fund'),
    alt.Row('fund')
    )

gp_chart

解决方案

要实现分组水平条形图,只需移除alt.Row('fund'),并添加偏移或启用dodge参数让同一index下的条形并排:

方法1:使用XOffset实现分组

import altair as alt

gp_chart = alt.Chart(df).mark_bar().encode(
    alt.X('value', title='数值'),
    alt.Y('index', axis=alt.Axis(grid=True), title='评级'),
    alt.Color('fund', title='基金'),
    # 通过XOffset让同一index下不同fund的条形偏移并排
    alt.XOffset('fund')
).properties(
    width=600,
    height=400
)

gp_chart

方法2:使用mark_bar的dodge参数

import altair as alt

gp_chart = alt.Chart(df).mark_bar(dodge=True).encode(
    alt.X('value', title='数值'),
    alt.Y('index', axis=alt.Axis(grid=True), title='评级'),
    alt.Color('fund', title='基金')
).properties(
    width=600,
    height=400
)

gp_chart

关键改动说明

  • 移除alt.Row('fund'):避免图表被拆分为独立的子图
  • 添加XOffset('fund')或设置dodge=True:让同一index类别下的不同fund条形沿X轴并排,形成分组效果
  • 可选:添加title参数优化坐标轴和图例的可读性,通过properties调整图表尺寸

注:由于两个fund的评级类别不完全一致(如第一个fund有BB、B,第二个有BB / B),图表会自动忽略缺失的类别对应位置,不会显示无效条形。

内容的提问来源于stack exchange,提问作者FFLS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:17:47