Как я могу отобразить значения другого столбца данных в виде меток оси? - PullRequest
1 голос
/ 20 марта 2020

Данные:

d = {
  'name': ['Lynda', 'Sharon', 'Claudia', 'Jennifer', 'Lucy'], 
  'rank': [1, 2, 3, 4, 5], 
  'hours_studied': [40, 60, 80, 20, 50]
}

df = pd.DataFrame(data=d)

График:

bars = alt.Chart(df).encode(
        x='hours_studied:Q',
        y='rank:N'
    ).mark_bar()

regression = bars.transform_regression('rank', 'hours_studied').mark_line()

bars + regression

enter image description here

Я хочу отобразить значения столбца name как метки оси Y вместо значений столбца rank. Если я изменю канал кодирования y на name и использую rank в качестве переменной сортировки, моя регрессия прекратится. Как я могу отображать имена как метки оси Y, сохраняя преобразование регрессии?

1 Ответ

1 голос
/ 21 марта 2020

Нет способа напрямую переназначить эти метки на значения в другом столбце. Однако вы можете добиться желаемого, скрыв ось и заменив ее подходящим текстовым слоем:

bars = alt.Chart(df).encode(
    x='hours_studied:Q',
    y=alt.Y('rank:N', axis=None)
).mark_bar()

regression = bars.transform_regression(
    'rank', 'hours_studied'
).mark_line(color='black')

text = alt.Chart(df).mark_text(
    align='right'
).encode(
    y=alt.Y('rank:N', axis=None),
    x=alt.value(-3),
    text='name:N',
)

bars + regression + text

enter image description here


Редактировать: чтобы показать ось с правой стороны, а не с левой стороны, вам нужно будет установить текстовую позицию в ширину диаграммы в пикселях. Например:

text = alt.Chart(df).mark_text(
    align='left'
).encode(
    y=alt.Y('rank:N', axis=None),
    x=alt.value(403),
    text='name:N',
)

(bars + regression + text)

enter image description here

...