在 Altair 中将图例分成多列

Eva*_*Kim 6 python altair

抱歉无法提供大量代码,一切都是互连的,现在不可能。

我的问题是我创建了一个点图作为“交互式图例”。

legend = alt.Chart(source).mark_point().encode(
    y=alt.Y('STATE', axis=alt.Axis(orient='right')),
).add_selection(
    select_state
)
Run Code Online (Sandbox Code Playgroud)

问题是列出了 50 个州。结果,图表变得非常长,并且无法将所有内容显示在一个屏幕上。

  • 有什么方法可以以某种方式包装该图表,以便它显示在多列中吗?鉴于图例是单柱点图,我认为这是不可能的。

  • 有什么方法可以将其转换为 Altair 中的某种结构,从而可以包装成非图表的多个列吗?

在此输入图像描述

或者,有没有办法重新定位我的滑块?它出现在底部:(如果它出现在顶部,我认为它将能够与其他所有内容出现在同一屏幕上,因此图例图表不会成为太大的问题。

slider = alt.binding_range(min=1992, max=2016, step=1)
# 1st selection filter
select_year = alt.selection_single(name="YEAR", fields=['YEAR'],
                                   bind=slider, init={'YEAR': 1992})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

jak*_*vdp 6

您可以指定编码的legend.columns属性来控制图例中的列数。例如,使用 cars 数据集:

import altair as alt
from vega_datasets import data

alt.Chart(data.cars.url).mark_point().encode(
    x='Horsepower:Q',
    y='Miles_per_Gallon:Q',
    color=alt.Color('Name:N', legend=alt.Legend(columns=8))
).properties(
    # Adjust chart width and height to match size of legend
    width=600,
    height=600
)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

然而,由于有如此多的属性,图例在实践中变得不太有用。您可能会考虑tooltip使用编码来显示这样的详细信息。

  • 啊,我明白了……这并不是传说,而是一张图表。我建议尝试在“图例”图表中添加 x 编码或列编码,以更改其布局方式。 (3认同)
  • 嘿,谢谢,这很有帮助。我希望保持这种方式似乎失去的互动性。例如,在此示例中 https://altair-viz.github.io/user_guide/interactions.html#selection-targets-fields-and-encodings 创建一个小图表作为交互式图例,这就是我的目的最终去为。 (2认同)