Altair - 如何在不操作 DataFrame 的情况下创建分组条形图

Posted

技术标签:

【中文标题】Altair - 如何在不操作 DataFrame 的情况下创建分组条形图【英文标题】:Altair - How to create a grouped bar Chart without manipulating the DataFrame 【发布时间】:2020-11-07 12:26:18 【问题描述】:

我注意到可以通过评估 DataFrame 的列在 Altair 中创建分组条形图。我的问题是我的数据没有将每个组作为特定列的值。

那么,是否可以在 Altair 中使用列名作为组名(无需评估列)或修改 DataFrame?

下面是我拥有的DataFrame和我需要的分组条形图:

【问题讨论】:

【参考方案1】:

这是一个宽格式数据的示例(请参阅Long-form vs. Wide-form Data)。要将其转换为长格式数据而不修改数据框,您可以使用Fold Transform。

完成此操作后,您可以按照Grouped Bar Chart Example 制作图表。它可能看起来像这样:

import pandas as pd
import altair as alt

df = pd.DataFrame(
    "Job Stat": ['INV', "WRK", "CMP", "JRB"],
    "Revenue": [100, 200, 300, 400],
    "Total Income": [150, 250, 350, 450]
)

(
  alt.Chart(df)
    .transform_fold(["Revenue", "Total Income"], as_=["key", "value"])
    .mark_bar()
    .encode(
        x="key:N",
        y="value:Q",
        color="key:N",
        column="Job Stat",
    )
)

为了使其更接近您的示例图表,您可以调整一些标签和图例设置:

(
  alt.Chart(df)
    .transform_fold(["Revenue", "Total Income"], as_=["key", "value"])
    .mark_bar()
    .encode(
        alt.X('key:N', axis=None),
        alt.Y("value:Q"),
        alt.Color("key:N", legend=alt.Legend(title=None, orient='bottom')),
        alt.Column("Job Stat",
          sort=['INV', "WRK", "CMP", "JRB"],
          header=alt.Header(labelOrient="bottom", title=None)
        )
    )
)

【讨论】:

太棒了。顺便说一句,您是开发人员之一吗?谢谢!

以上是关于Altair - 如何在不操作 DataFrame 的情况下创建分组条形图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 altair 分层图中添加图例

Altair 条形图 - 标签放置和格式设置

在 Altair 中设置条形图上的标签格式

更改 Altair 图例中的形状颜色

Altair/Vega 地图未显示。 Chrome 无法加载 SourceMap

为啥 Altair 条形图中最左边的条不尊重选择画笔位置?