【问题标题】:altair grouped bar chart side-by-side instead of single chartaltair 并排分组条形图而不是单个图表
【发布时间】:2021-11-19 09:33:36
【问题描述】:

我尝试创建图表,但最终并排显示了两个图表。 如何获得单个图表,而不是像 altair 分组条形图 example 中显示的那样。

df = pd.DataFrame({
    'strike': [200,225,250,275,300,325,350,200,225,250,275,300,325,350],
    'opttype': ['ce','ce','ce','ce','ce','ce','ce','pe','pe','pe','pe','pe','pe','pe' ],
    'oi': [100,150,500,800,450,200,77,50,500,210,300,150,60,17]
    
})
c = alt.Chart(df).mark_bar().encode(
    x='strike:N',
    y='oi:Q',
    color='opttype:N',
    column='opttype:N'
)

输出

我尝试添加此 link 中指定的轴,但是我无法获得组合图。可能是我在这里遗漏了一些东西。

我也想知道官方文档示例如何在没有“轴”的情况下正确工作。

【问题讨论】:

    标签: python data-visualization altair


    【解决方案1】:

    目前最好的方法是切换xcolumn 编码,然后使每个面板的宽度变窄:

    c = alt.Chart(df).mark_bar().encode(
        x='opttype:N',
        y='oi:Q',
        color='opttype:N',
        column='strike:N'
    ).properties(width=50)
    

    然后,如果您愿意,您可以调整轴和标题标签,如链接示例中所示。例如,您可以像这样将标题标签移动到底部:

    c = alt.Chart(df).mark_bar().encode(
        x=alt.X('opttype:N', axis=None),
        y='oi:Q',
        color='opttype:N',
        column=alt.Column('strike:N', header=alt.Header(orient='bottom'))
    ).properties(width=50)
    

    这无疑是一个不完美的解决方案。 Vega-Lite 正在添加 offset 编码,这将使这成为可能,而无需使用多个列分面,但目前尚不可用。

    【讨论】:

    • 谢谢@jakevdp,这行得通。偏移量会使这更好。我将尝试删除底部的标签(ce / pe)。还想知道是否有办法在底部而不是当前位置(在顶部)获取 Strike 值。我的大脑经过训练可以查看 X 轴底部的值。
    • 是的,您在问题中链接到的答案显示了如何将标题标签移动到底部。
    • 链接的示例在列类型上使用了 "axis=",我认为 latest docs 不支持该类型。 “间距”选项有助于减少条形之间的间隙。
    • 好的,看看我编辑的答案
    【解决方案2】:

    x 轴和颜色变量应该相同:

    df = pd.DataFrame({
        'strike': [200,225,250,275,300,325,350,200,225,250,275,300,325,350],
        'opttype': ['ce','ce','ce','ce','ce','ce','ce','pe','pe','pe','pe','pe','pe','pe' ],
        'oi': [100,150,500,800,450,200,77,50,500,210,300,150,60,17]
    })
    
    alt.Chart(df).mark_bar().encode(
        x='opttype:N',
        y='oi:Q',
        color='opttype:N',
        column='strike:N'
    )
    

    【讨论】:

    • 感谢@joelosblom 的回答。我只是选择了前一个作为接受的答案,因为它是在几秒钟前出现的。
    猜你喜欢
    • 2019-03-18
    • 2020-02-25
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多