Повторение оси в ограненной диаграмме Альтаира - PullRequest
0 голосов
/ 07 ноября 2018

Учитывая простой, граненый график, как:

import altair as alt

data = alt.Data(values = [
    { "category" : "a", "x" : 1, "y" : 2 },
    { "category" : "a", "x" : 2, "y" : 4 },
    { "category" : "b", "x" : 1, "y" : 3 },
    { "category" : "b", "x" : 2, "y" : 5 }
])

alt.Chart(data).mark_point().encode(x = "x:Q", y = "y:Q").facet(
    row = "category:O"
)

Как у вас появляется ось х для каждой подкарты, а не один раз внизу? Это должно улучшить читаемость, когда есть много подкарт ...

chart

1 Ответ

0 голосов
/ 07 ноября 2018

К сожалению, при использовании кодирования строки невозможно отобразить ось X на нескольких графиках. В качестве обходного пути вы можете вручную vconcat построить диаграммы на основе отфильтрованных данных:

chart = alt.Chart(data).mark_point().encode(x="x:Q", y="y:Q")

alt.vconcat(
    chart.transform_filter(alt.datum.category == 'a'),
    chart.transform_filter(alt.datum.category == 'b')
)

enter image description here

Чтобы избежать выписывания значений столбцов вручную, вы можете генерировать различные подкарты с помощью инструментов Python; например, это эквивалентно приведенному выше:

df = pd.DataFrame.from_records([
    { "category" : "a", "x" : 1, "y" : 2 },
    { "category" : "a", "x" : 2, "y" : 4 },
    { "category" : "b", "x" : 1, "y" : 3 },
    { "category" : "b", "x" : 2, "y" : 5 }
])

chart = alt.Chart(df).mark_point().encode(x="x:Q", y="y:Q")

alt.vconcat(
    *(chart.transform_filter(alt.datum.category == val)
      for val in df['category'].unique())
)
...