如何在 Altair 堆积条形图工具提示中显示标准化类别
How to display normalized categories in Altair stacked bar chart tooltip
我正在使用数据帧列中分类字段的计数创建堆积条形图。
chart = alt.Chart(df2).mark_bar().encode(
x="take__take:O",
y=alt.Y('count(name)', stack="normalize", axis=alt.Axis(title="Percent", format="%")),
color=alt.Color('name', sort=alt.EncodingSortField('value', order='descending')),
order=alt.Order(
'value',
sort="ascending"
),
tooltip=[
alt.Tooltip('count(name)', title="Total Students")
]
)
我将如何在工具提示中获取标准化计数?
到目前为止,您的图表使用编码速记来计算各种聚合;对于更复杂的操作(比如在工具提示中显示标准化值),您需要直接使用 transforms。
这是在工具提示中显示每组百分比的示例,使用的图表与您在上面显示的类似:
import altair as alt
import numpy as np
import pandas as pd
np.random.seed(0)
df2 = pd.DataFrame({
'name': np.random.choice(['A', 'B', 'C', 'D'], size=100),
'value': np.random.randint(0, 20, 100),
'take__take': np.random.randint(0, 5, 100)
})
alt.Chart(df2).transform_aggregate(
count='count()',
groupby=['name', 'take__take']
).transform_joinaggregate(
total='sum(count)',
groupby=['take__take']
).transform_calculate(
frac=alt.datum.count / alt.datum.total
).mark_bar().encode(
x="take__take:O",
y=alt.Y('count:Q', stack="normalize", axis=alt.Axis(title="Percent", format="%")),
color='name:N',
tooltip=[
alt.Tooltip('count:Q', title="Total Students"),
alt.Tooltip('frac:Q', title="Percentage of Students", format='.0%')
]
)
我正在使用数据帧列中分类字段的计数创建堆积条形图。
chart = alt.Chart(df2).mark_bar().encode(
x="take__take:O",
y=alt.Y('count(name)', stack="normalize", axis=alt.Axis(title="Percent", format="%")),
color=alt.Color('name', sort=alt.EncodingSortField('value', order='descending')),
order=alt.Order(
'value',
sort="ascending"
),
tooltip=[
alt.Tooltip('count(name)', title="Total Students")
]
)
我将如何在工具提示中获取标准化计数?
到目前为止,您的图表使用编码速记来计算各种聚合;对于更复杂的操作(比如在工具提示中显示标准化值),您需要直接使用 transforms。
这是在工具提示中显示每组百分比的示例,使用的图表与您在上面显示的类似:
import altair as alt
import numpy as np
import pandas as pd
np.random.seed(0)
df2 = pd.DataFrame({
'name': np.random.choice(['A', 'B', 'C', 'D'], size=100),
'value': np.random.randint(0, 20, 100),
'take__take': np.random.randint(0, 5, 100)
})
alt.Chart(df2).transform_aggregate(
count='count()',
groupby=['name', 'take__take']
).transform_joinaggregate(
total='sum(count)',
groupby=['take__take']
).transform_calculate(
frac=alt.datum.count / alt.datum.total
).mark_bar().encode(
x="take__take:O",
y=alt.Y('count:Q', stack="normalize", axis=alt.Axis(title="Percent", format="%")),
color='name:N',
tooltip=[
alt.Tooltip('count:Q', title="Total Students"),
alt.Tooltip('frac:Q', title="Percentage of Students", format='.0%')
]
)