Altair: легенды Mark_rule со слоистыми гранями и другая легенда дублируют легенды

#python #legend #facet #altair

#python #легенда #фасет #altair

Вопрос:

У меня есть гистограмма для значений NPS с легендой градиента. Я хотел бы одновременно отображать некоторые статические значения с помощью legended mark_rule и, наконец, огранять результаты. Однако я не могу найти способ сделать это, не дублируя легенды или не оставляя легенду градиента.

Я не уверен, связана ли эта ошибка, она похожа, но ни один из примеров не похож на мой: https://github.com/vega/vega-lite/issues/5996

Любая помощь приветствуется!

 import pandas as pd
import altair as alt

df = pd.DataFrame({
    'Name': ['PlaceA', 'PlaceB', 'PlaceC', 'PlaceA', 'PlaceB', 'PlaceC', 'PlaceA', 'PlaceB', 'PlaceC'],
    'NPS': [58, 75, 100, 76, 80, 92, 90, 80, 72],
    'Month': [1, 1, 1, 2, 2, 2, 3, 3, 3],
    'Target': [75, 75, 75, 75, 75, 75, 75, 75, 75]
})

bars = alt.Chart(df).mark_bar().encode(
    y = alt.Y(
        'Month:N'
    ),
    x=alt.X(
        'NPS',
        axis=None
    ),
    color=alt.Color(
        'NPS',
        scale=alt.Scale(
            scheme='redyellowgreen',
            domain=[0, 100]
        ),
        legend=alt.Legend(
            title='NPS'
        )
    )
)

# All was fine with this setting, except for the missing legend
lines1 = alt.Chart(df).mark_rule(color='red').encode(
    x='Target'
)

# This otherwise optimal solution duplicates all the legends.
lines2 = alt.Chart(df).transform_fold(
    ['Target']
).mark_rule().encode(
    x='value:Q',
    color=alt.Color(
        'key:N',
        scale=alt.Scale(
            range=['red']
        ),
        legend=alt.Legend(
            title=None
        )
    )
)

# Most simple code for duplicating the legends.
lines3 = alt.Chart(df).mark_rule().encode(
    x='Target:Q',
    color='Target:N'
)

alt.layer(
    lines2, bars, width=200
).facet(
    facet=alt.Facet(
        'Name:N',
        title=None
    ),
    columns=3
)
  

Комментарии:

1. Я думаю, вы правы, что это пример ошибки в github.com/vega/vega-lite/issues/5996 . Я не знаю ни одного хорошего обходного пути.

2. Спасибо за ответ. Знаете ли вы какой- нибудь обходной путь? На самом деле не имеет значения, насколько это плохо или хакерски, эта функциональность имеет решающее значение для нашего варианта использования, а повторяющиеся легенды все разрушают.