Быстрый способ визуализации нескольких столбцов в Альтаире с помощью линий регрессии - PullRequest
1 голос
/ 26 апреля 2020

Таким образом, в Altair я быстро визуализировал несколько столбцов, используя repeat. Этот метод подходит, пока я не хочу добавить линии регрессии, используя transform_regression или текст, используя mark_text, потому что он не позволяет мне добавлять слои при использовании repeat.

Pandas, что позволяет очень легко получить корреляция для полного df с использованием df.corr было бы здорово иметь быстрый способ визуализации всех / нескольких столбцов быстро.

Пример кода:

import altair as alt
from vega_datasets import data
from altair.expr import datum

iris = data.iris()

chart = alt.Chart(iris).mark_circle().encode(
    alt.X(alt.repeat("column"), type='quantitative'),
    alt.Y(alt.repeat("row"), type='quantitative'),
    color='species:N'
).properties(
    width=100,
    height=100
).repeat(
    row=['sepalLength', 'sepalWidth', 'petalLength','petalWidth'],
    column=['petalWidth','petalLength', 'sepalWidth', 'sepalLength']
)

chart

Вот вывод из код enter image description here

Итак, мой вопрос: есть ли способ быстро добавить какие-либо дополнительные функции, например, линию регрессии при использовании repeat? Если нет, то каков наилучший способ быстрой визуализации нескольких столбцов данных в одном go при добавлении дополнений?

1 Ответ

0 голосов
/ 27 апреля 2020

Вместо повтора можно использовать два преобразования сгиба и фасет строки / столбца, а затем преобразование регрессии можно применить напрямую. Вот пример:

import altair as alt
import pandas as pd

base = alt.Chart(iris).transform_fold(
    ['sepalLength', 'sepalWidth', 'petalLength','petalWidth'],
    as_=['key_x', 'value_x']
).transform_fold(
    ['sepalLength', 'sepalWidth', 'petalLength','petalWidth'],
    as_=['key_y', 'value_y']
).encode(
    x=alt.X('value_x:Q', title=None),
    y=alt.Y('value_y:Q', title=None),
).properties(
    width=100,
    height=100
)

alt.layer(
    base.mark_circle().encode(color='species:N'),
    base.transform_regression(
        'value_x', 'value_y',
        groupby=['key_x', 'key_y', 'species']
    ).mark_line(
        color='black'
    ).encode(
        detail='species:N'
    )
).facet(
    column=alt.Column('key_x:N', title=None),
    row=alt.Row('key_y:N', sort='descending')
).resolve_scale(
    x='independent',
    y='independent'
)

enter image description here

...