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