python - 将样本编号附加到 altair 中的 X-Labels

标签 python altair vega-lite

我想自动附加与 altair 图形的 x 标签相对应的示例 #(在括号中)。我愿意在 altair 之外执行此操作,但我认为可能有一种方法可以使用 altair/vega-lite 在图形级别执行此操作。我使用来自 altair/vega 网站(vega_dataset 的一部分)的示例粘贴代码,但使用的是一种老掉牙的手动方法,在该方法中,我为其中一个标签显式重命名标签。在这种情况下,我已将样本编号 73 添加到欧洲。

Link to data

import altair as alt
from vega_datasets import data

df = data.cars()
df['Origin'] = df['Origin'].replace({'Europe':'Europe (n=73)'})

alt.Chart(df).transform_density(
    'Miles_per_Gallon',
    as_=['Miles_per_Gallon', 'density'],
    extent=[5, 50],
    groupby=['Origin']
).mark_area(orient='horizontal').encode(
    y='Miles_per_Gallon:Q',
    color='Origin:N',
    x=alt.X(
        'density:Q',
        stack='center',
        impute=None,
        title=None,
        axis=alt.Axis(labels=False, values=[0],grid=False, ticks=True),
    ),
    column=alt.Column(
        'Origin:N',
        header=alt.Header(
            titleOrient='bottom',
            labelOrient='bottom',
            labelPadding=0,
        ),
    )
).properties(
    width=100
).configure_facet(
    spacing=0
).configure_view(
    stroke=None
)

enter image description here

最佳答案

您可以使用 pandas 生成替换字典并将其分配给新的数据框列:

import altair as alt
from vega_datasets import data

df = data.cars()
group_sizes = df.groupby('Origin').size()
replace_dict = group_sizes.index + ' (n=' + group_sizes.astype(str) + ')'
df['Origin_with_count'] = df['Origin'].replace(replace_dict)

alt.Chart(df).transform_density(
    'Miles_per_Gallon',
    as_=['Miles_per_Gallon', 'density'],
    extent=[5, 50],
    groupby=['Origin_with_count', 'Origin']
).mark_area(orient='horizontal').encode(
    y='Miles_per_Gallon:Q',
    color='Origin:N',
    x=alt.X(
        'density:Q',
        stack='center',
        impute=None,
        title=None,
        axis=alt.Axis(labels=False, values=[0],grid=False, ticks=True),
    ),
    column=alt.Column(
        'Origin_with_count:N',
        header=alt.Header(
            title=None,
            labelOrient='bottom',
            labelPadding=0,
        ),
    )
).properties(
    width=100
).configure_facet(
    spacing=0
).configure_view(
    stroke=None
)

您不确定是否可以使用 labelExpr 做一些更优雅的事情。

enter image description here

关于python - 将样本编号附加到 altair 中的 X-Labels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66821102/

相关文章:

python - 数据流SDK版本

python - 如何在 Python 中将变量分配给字典中的值?

python - Altair 无法访问文件系统以在 Google Colab 上渲染大型数据集

python - 具有不同 x 和 y 编码的 Altair 选择

python - 无法在 folium map 中将 altair 可视化作为弹出窗口插入

python - 在 Altair 中结合悬停和单击选择

python - 如何在 Django 中提供创建的临时文件

python - 使用 tensorflow 求解函数方程

python - 如何将单个文本标签添加到 Altair 散点图中的最大点?

vega-lite - 如何在打洞卡中使用所有圆圈尺寸?