如何将另一个数据框列的值显示为轴标签?

时间:2020-03-20 18:25:30

标签: python altair

数据:

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 个答案:

答案 0 :(得分:1)

无法直接将这些标签重新映射到另一列中的值。但是,您可以通过隐藏轴并将其替换为合适的文本层来实现所需的目标:

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