Python 在Altair中将图例制作为多个列

Python 在Altair中将图例制作为多个列,python,altair,Python,Altair,抱歉不能提供很多代码,所有东西都是相互关联的,现在不可能 我的问题是我创建了一个点图,作为一个“交互式图例” 问题是列出了50个州。结果,图表变得很长,使所有内容都无法在单个屏幕上显示 有没有办法把这个图表包装成多列显示?我认为这是不可能的,因为图例是一个单柱点图 有没有办法将其转换为Altair中的某种结构,从而可以将其包装成非图表的多列 或者,是否有方法重新定位滑块?它显示在底部:(如果它显示在顶部,我认为它将能够显示在与其他所有内容相同的屏幕上,因此图例图表不会有太大的问题 slid

抱歉不能提供很多代码,所有东西都是相互关联的,现在不可能

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

问题是列出了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})

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

将altair导入为alt
从vega_数据集导入数据
alt.Chart(data.cars.url).mark_point().encode(
x='马力:Q',
y='英里每加仑:Q',
color=alt.color('Name:N',legend=alt.legend(columns=8))
).物业(
#调整图表宽度和高度以匹配图例的大小
宽度=600,
高度=600
)


<> P>这许多属性在实践中并不是很有用。你可以考虑一个<代码>工具提示>代码>来代替这样的细节信息。

< P>检查这个例子:

import altair as alt
from vega_datasets import data

source = data.unemployment_across_industries.url

selection = alt.selection_multi(fields=['series'], bind='legend')

alt.Chart(source).mark_area().encode(
    alt.X('yearmonth(date):T', axis=alt.Axis(domain=False, format='%Y', tickSize=0)),
    alt.Y('sum(count):Q', stack='center', axis=None),
    alt.Color('series:N', scale=alt.Scale(scheme='category20b')),
    opacity=alt.condition(selection, alt.value(1), alt.value(0.2))
).add_selection(
selection
)

参考资料:

嘿,谢谢。这很有帮助。我希望保持这样失去的互动性。例如,在本例中,创建一个小图表作为互动图例,这就是我最终的目标。啊,我明白了……这不是一个真正的图例,这是一个图表。我建议尝试添加将x编码或列编码添加到“图例”图表中,以更改其布局方式。是否有任何相关示例可以为我提供进一步实验的正确方向?请查看此示例:
import altair as alt
from vega_datasets import data

source = data.unemployment_across_industries.url

selection = alt.selection_multi(fields=['series'], bind='legend')

alt.Chart(source).mark_area().encode(
    alt.X('yearmonth(date):T', axis=alt.Axis(domain=False, format='%Y', tickSize=0)),
    alt.Y('sum(count):Q', stack='center', axis=None),
    alt.Color('series:N', scale=alt.Scale(scheme='category20b')),
    opacity=alt.condition(selection, alt.value(1), alt.value(0.2))
).add_selection(
selection
)