Повторные графики - PullRequest
       12

Повторные графики

2 голосов
/ 06 июня 2019

Я пытаюсь сделать сюжет:

import altair as alt
from vega_datasets import data

movies = data.movies.url

base = alt.Chart(movies).mark_bar().encode(
alt.Y('count()')).properties(
    width=200,
    height=150
)

chart = alt.vconcat()
for x_encoding in ['IMDB_Rating:Q', 'IMDB_Votes:Q']:
    row = alt.hconcat()
    for maxbins_encoding in [10, 50]:
        row |= base.encode(alt.X(x_encoding, 
        type='quantitative',
        bin=Bin(maxbins=maxbins_encoding)))
    chart &= row
chart

Это работает. Тогда я пытаюсь использовать alt.repeat():

alt.Chart(vega_datasets.data.movies.url).mark_bar().encode(
    alt.X(alt.repeat("row"), type='quantitative',  
    bin=Bin(maxbins=alt.repeat('column'))),
    alt.Y('count()')
).properties(
    width=200,
    height=150
).repeat(
    row=['IMDB_Rating', 'IMDB_Votes'],
    column=[10, 50]
)

Это дает мне это сообщение об ошибке:

SchemaValidationError: Invalid specification

        altair.vegalite.v3.schema.core.BinParams->maxbins, validating 'type'

        {'repeat': 'column'} is not of type 'number'

Так что я, должно быть, что-то пропустил. Имеет ли это какое-то отношение к использованию repeat() в аргументе bin=Bin(), кроме непосредственного использования его в encode()?

1 Ответ

3 голосов
/ 07 июня 2019

К сожалению, повторные записи нельзя использовать для параметров бина.Единственные параметры, которые используют repeat в Vega-Lite, - это имена столбцов, передаваемые кодировкам, поэтому ваш первоначальный подход к циклированию, вероятно, будет лучшим.

Если вы хотите использовать повторы для кодировок x, вы можете сделать что-токак это:

def make_column(maxbins):
    return alt.Chart(movies).mark_bar().encode(
        alt.X(alt.repeat("row"), type='quantitative',  
              bin=alt.Bin(maxbins=maxbins)),
        alt.Y('count()')
    ).properties(
        width=200,
        height=150
    ).repeat(
        row=['IMDB_Rating', 'IMDB_Votes'],
    )

make_column(10) | make_column(50)

enter image description here

...