如何将另一个数据框列的值显示为轴标签?
How can I display the values of another dataframe column as axis labels?
数据:
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 轴标签?
无法直接将这些标签重新映射到另一列中的值。但是,您可以通过隐藏轴并用合适的文本层替换它来实现您想要的效果:
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)
数据:
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 轴标签?
无法直接将这些标签重新映射到另一列中的值。但是,您可以通过隐藏轴并用合适的文本层替换它来实现您想要的效果:
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)