【问题标题】:Altair limit number of barsAltair 限制条数
【发布时间】:2021-01-18 18:14:35
【问题描述】:

假设我有一个像这样的数据框

   label  counts
4      4       8
5      5       7
6      6       6
7      7       5
0      0       4
1      1       3
2      2       2
3      3       1

我想用altair做一个条形图,条形的高度是计数,标签是标签。如果我想要前 3 个计数,如何限制要显示的条数?

我知道我可以让df.sort_values("counts", ascending=False).iloc[:3] 成为图表的来源,但我想知道是否有办法直接使用 altair 来做到这一点。

【问题讨论】:

    标签: python altair


    【解决方案1】:

    您可以按照 Altair 文档中的 Top K Items 示例执行此操作。它在此处应用于您的数据:

    import altair as alt
    import pandas as pd
    from io import StringIO
    df = pd.read_csv(StringIO("""
       label  counts
    4      4       8
    5      5       7
    6      6       6
    7      7       5
    0      0       4
    1      1       3
    2      2       2
    3      3       1
    """), delim_whitespace=True)
    
    alt.Chart(df).transform_window(
        rank='rank(counts)',
        sort=[alt.SortField('counts', order='descending')]
    ).transform_filter(
        alt.datum.rank <= 3
    ).mark_bar().encode(
        x='counts:Q',
        y='label:O'
    )
    

    【讨论】:

    • 谢谢@jakevdp 如果我分面图表,这会成立吗?如果我有另一列,比如组,其中前 4 行来自第 1 组,后 4 行来自第 2 组,如果我通过变量组添加构面,我是否仍会显示每个组的前 3 个标签?
    • 不行,我想你得稍微修改一下,
    • 我无法使用 altair 或 seaborn 做到这一点。如果你知道怎么做,你想让我创建另一个问题还是你可以在这个问题中扩展你的答案?非常感谢!
    • 最好再问一个问题。代码块不会在评论线程中呈现。
    • 我打开了a new question
    猜你喜欢
    • 1970-01-01
    • 2019-06-22
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多