Altair如何在不操纵数据框的情况下创建分组条形图

2024-06-11 06:01:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

那么,是否可以在Altair中将列名用作组名(不计算列)或修改数据帧

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

enter image description here


Tags: 数据中将条形图altair
1条回答
网友
1楼 · 发布于 2024-06-11 06:01:23

这是一个宽格式数据的示例(请参见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",
    )
)

enter image description here

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

(
  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)
        )
    )
)

enter image description here

相关问题 更多 >