Как добавить текст в строку в Альтаире? - PullRequest
2 голосов
/ 18 апреля 2020

Я хотел бы добавить текст к этим ссылочным строкам, следующий код, который я использовал:

double2 = alt.Chart(source2).mark_line().transform_calculate(
    double2='5*pow(2,(datum.x/2))'
).transform_fold(
    ['double2']
).encode(
    x='x:Q',
    y=alt.Y('value:Q', scale=alt.Scale(type='log')),
    color=alt.value('lightgray')
)

source5 = alt.sequence(start=0, stop=28, step=1, as_='x')

double5 = alt.Chart(source5).mark_line().transform_calculate(
    double5='5*pow(2,(datum.x/5))'
).transform_fold(
    ['double5']
).encode(
    x='x:Q',
    y='value:Q',
    color=alt.value('lightgray')
)

double2 + double5

вывод

Я хотел бы добавить текст вдоль этих линий «число смертей удваивается каждые 2 дня» и «каждые 5 дней», как в таблице из нашего мира в данных ниже:

наш мир в данных

1 Ответ

1 голос
/ 18 апреля 2020

Нет хорошего автоматизированного способа сделать это, потому что углы текста в Vega-Lite нельзя привязать к координатам данных. Но с небольшой настройкой вы можете выполнить sh это с помощью текстового слоя:

import altair as alt

source2 = alt.sequence(start=0, stop=28, step=1, as_='x')

double2 = alt.Chart(source2).mark_line().transform_calculate(
    double2='5*pow(2,(datum.x/2))'
).transform_fold(
    ['double2']
).encode(
    x='x:Q',
    y=alt.Y('value:Q', scale=alt.Scale(type='log')),
    color=alt.value('lightgray')
)

source5 = alt.sequence(start=0, stop=28, step=1, as_='x')

double5 = alt.Chart(source5).mark_line().transform_calculate(
    double5='5*pow(2,(datum.x/5))'
).transform_fold(
    ['double5']
).encode(
    x='x:Q',
    y='value:Q',
    color=alt.value('lightgray')
)

text5 = alt.Chart({'values':[{'x': 20, 'y': 100}]}).mark_text(
    text='doubles every 5 days', angle=346
).encode(
    x='x:Q', y='y:Q'
)

text2 = alt.Chart({'values':[{'x': 20, 'y': 7000}]}).mark_text(
    text='doubles every 2 days', angle=327
).encode(
    x='x:Q', y='y:Q'
)

double2 + double5 + text2 + text5

enter image description here

Это будет немного чище в Альтаире 4.2, как только он поддерживает новую кодировку данных.

...