数据:
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
我想将name
列值显示为 y轴标签,而不是rank
列值。如果我将编码通道y
更改为name
并使用rank
作为排序变量,我的回归会失败。在保留回归变换的同时如何将名称显示为y轴标签?
答案 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
编辑:要在右侧而不是左侧显示轴,您必须将文本位置设置为图表的宽度(以像素为单位)。例如:
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)