В продолжение этого вопроса У меня есть два дополнительных варианта для реализации:
- Установить размещение метки в середине диаграммы, независимо от высоты столбца
- Метка формата должна отображаться как часть строки, включая круглые скобки
Мой код сейчас выглядит так:
df = pd.DataFrame({'name':['bar','foo'],
'presented_value':[2,20],
'coloring_value':[1,25]})
base = (alt.Chart(df, height=250, width=375).mark_bar()
.encode(
x='name',
y=alt.Y('presented_value', axis=alt.Axis(orient='right')),
color='name'
)
)
bars = base.mark_bar().encode(color=alt.condition(
alt.datum.presented_value > alt.datum.coloring_value,
alt.value('lightgreen'),
alt.value('darkred')
))
text_sub_brand = base.mark_text(
align='center', baseline='bottom',
dy=35, fontSize=24
).encode(
text='presented_value'
)
text_cluster = base.mark_text(
align='center', baseline='bottom',
dy=50, fontSize=16
).encode(
text='coloring_value'
).transform_calculate(label='"Cluster value: " + datum.coloring_value')
(bars + text_sub_brand + text_cluster).properties(width=700)
Что касается размещения, я пробовал различные параметры MarkDef
, используя документы здесь , но не нашел варианта, который позволяет размещать его относительно диаграммы, а не бара. Как видно на изображении выше для панели foo
, я бы хотел избежать случаев, когда метка отображается за пределами области оси Y.
Что касается форматирования, я попытался реализовать решение здесь , но в моем случае почему-то не сработало. В идеале я хотел бы, чтобы формат был label='"(" + datum.coloring_value + ")"')
, но использование скобок вызывало ошибку JavaScript:
This usually means there's a typo in your chart specification. See the javascript console for the full traceback.
Можно ли это сделать? Спасибо!