Altair - 如何在不操作 DataFrame 的情况下创建分组条形图
Altair - How to create a grouped bar Chart without manipulating the DataFrame
我注意到可以通过评估 DataFrame 的列在 Altair 中创建分组条形图。我的问题是我的数据没有将每个组作为特定列的值。
那么,是否可以在 Altair 中将列名用作组名(不评估列)或修改 DataFrame?
下面是我有的DataFrame和我需要的分组条形图:
这是宽格式数据的示例(参见 Long-form vs. Wide-form Data). To transform it to Long-form data without modifying the dataframe, you can use the 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)
)
)
)
我注意到可以通过评估 DataFrame 的列在 Altair 中创建分组条形图。我的问题是我的数据没有将每个组作为特定列的值。
那么,是否可以在 Altair 中将列名用作组名(不评估列)或修改 DataFrame?
下面是我有的DataFrame和我需要的分组条形图:
这是宽格式数据的示例(参见 Long-form vs. Wide-form Data). To transform it to Long-form data without modifying the dataframe, you can use the 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)
)
)
)