Изменение цвета формы в легенде Альтаира - PullRequest
1 голос
/ 04 августа 2020

Рассмотрим следующий код, адаптированный из веб-сайта Altair .

import altair as alt
import pandas as pd

source = pd.DataFrame({
    'a': ['A', 'B', 'B', 'B', 'E', 'F', 'G', 'H', 'I'],
    'b': [28, 55, 43, 91, 81, 53, 19, 87, 52]
})
brush = alt.selection(type='single')

alt.Chart(source).mark_point(filled=True).encode(
    x='a',
    y='b:Q',
    shape='a',
    color=alt.condition(brush, 
                        alt.Color('b:N', legend=alt.Legend(columns=2, symbolFillColor='blue')),
                        alt.value(None)),
).add_selection(brush)

На выходе получается этот график:

введите описание изображения здесь

Когда я щелкаю точку данных, все остальные исчезают, и это нормально.

Проблема находится в легенде , где фигуры не имеют цвет , из-за alt.value(None)).

Как мне установить цвет, отличный от невидимого, для фигур внутри легенды, сохраняя выделение (когда я щелкаю точку данных, которая заставляет все остальные исчезать)?

Я пробовал symbolFillColor='blue', symbolStrokeColor='blue', но это не меняет цвет формы.

Спасибо :)

1 Ответ

1 голос
/ 04 августа 2020

Один из способов сделать это - установить цвет метки по умолчанию:

import altair as alt
import pandas as pd

source = pd.DataFrame({
    'a': ['A', 'B', 'B', 'B', 'E', 'F', 'G', 'H', 'I'],
    'b': [28, 55, 43, 91, 81, 53, 19, 87, 52]
})
brush = alt.selection(type='single')

alt.Chart(source).mark_point(filled=True, color='blue').encode(
    x='a',
    y='b:Q',
    shape='a',
    color=alt.condition(brush, 
                        alt.Color('b:N', legend=alt.Legend(columns=2)),
                        alt.value(None)),
).add_selection(brush)

введите описание изображения здесь

Причина, по которой symbolFillColor и symbolStrokeColor не работают, заключается в том, что вы применяли их к цветовой легенде, и эти цвета по умолчанию будут отменены кодировкой.

...