Добавление меток в конце линейного графика в Альтаире - PullRequest
3 голосов
/ 13 апреля 2020

Итак, я пытался получить его, чтобы в конце каждой строки был ярлык с названием страны, затем я могу удалить легенду. Попробовал поиграть с transform_filter, но не повезло.

Я использовал данные отсюда https://ourworldindata.org/coronavirus-source-data Я очистил и изменил форму данных, чтобы они выглядели так: -

    index   days    date    country value
0   1219    0   2020-03-26  Australia   11.0
1   1220    1   2020-03-27  Australia   13.0
2   1221    2   2020-03-28  Australia   13.0
3   1222    3   2020-03-29  Australia   14.0
4   1223    4   2020-03-30  Australia   16.0
5   1224    5   2020-03-31  Australia   19.0
6   1225    6   2020-04-01  Australia   20.0
7   1226    7   2020-04-02  Australia   21.0
8   1227    8   2020-04-03  Australia   23.0
9   1228    9   2020-04-04  Australia   30.0
import altair as alt

countries_list = ['Australia', 'China', 'France', 'Germany', 'Iran', 'Italy','Japan', 'South Korea', 'Spain', 'United Kingdom', 'United States']

chart = alt.Chart(data_core_sub).mark_line().encode(
                                            alt.X('days:Q'),
                                            alt.Y('value:Q', scale=alt.Scale(type='log')),
                                            alt.Color('country:N', scale=alt.Scale(domain=countries_list,type='ordinal')),    
                                        )

labels = alt.Chart(data_core_sub).mark_text().encode(
                                            alt.X('days:Q'),
                                            alt.Y('value:Q', scale=alt.Scale(type='log')),
                                            alt.Text('country'),
                                            alt.Color('country:N', legend=None, scale=alt.Scale(domain=countries_list,type='ordinal')), 
                                        ).properties(title='COVID-19 total deaths', width=600)


alt.layer(chart, labels).resolve_scale(color='independent')

Это текущий беспорядок, в котором находится график.

enter image description here

Как бы я go только о показе последнего ' название страны?

РЕДАКТИРОВАТЬ

Вот результат. Я мог бы посмотреть на настройку некоторых стран по отдельности, поскольку настройка группы означает, что некоторые метки всегда расположены плохо, независимо от того, что я делаю с выравниванием dx и dy.

enter image description here

1 Ответ

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

Вы можете сделать это путем агрегирования кодировок x и y. Вы хотите, чтобы текст имел максимальное значение x, поэтому вы можете использовать 'max' агрегат в x. Для значения y вы хотите, чтобы значение y было связано с максимальным значением x, поэтому вы можете использовать агрегат {"argmax": "x"}.

С небольшой корректировкой выравнивания текста результат выглядит следующим образом:

labels = alt.Chart(data_core_sub).mark_text(align='left', dx=3).encode(
    alt.X('days:Q', aggregate='max'),
    alt.Y('value:Q', aggregate={'argmax': 'days'}, scale=alt.Scale(type='log')),
    alt.Text('country'),
    alt.Color('country:N', legend=None, scale=alt.Scale(domain=countries_list,type='ordinal')), 
).properties(title='COVID-19 total deaths', width=600)
...