Altair:如何向具有行的条形图添加标签
Altair: How to add labels to bar charts that have rows
在尝试向具有行的 Altair 条形图添加标签时,我收到 SchemaValidationError。我说的是像这里这样的标签:
https://altair-viz.github.io/gallery/bar_chart_with_labels.html
我说的是带行或 "horizontal grouped bar charts" 的条形图,如下所示:
https://altair-viz.github.io/gallery/grouped_bar_chart_horizontal.html
这是不起作用的代码:
from vega_datasets import data
source = data.barley()
bars = alt.Chart(source).mark_bar().encode(
x='sum(yield):Q',
y='year:O',
row='variety:N',
)
bars
text = bars.mark_text(
align='left',
baseline='middle',
dx=3 # Nudges text to right so it doesn't appear on top of the bar
).encode(
text='sum(yield):Q'
)
bars + text
如果我删除条形图中的行选项,它会按预期工作:
bars = alt.Chart(source).mark_bar().encode(
x='sum(yield):Q',
y='year:O'
)
bars
text = bars.mark_text(
align='left',
baseline='middle',
dx=3 # Nudges text to right so it doesn't appear on top of the bar
).encode(
text='sum(yield):Q'
)
bars + text
将行添加到 'mark_text' 方法也无济于事...
最后,我希望看到栏右侧的标签,如下所示:
https://imgur.com/KFJtNkb
您的代码片段中的错误是
ValueError: Faceted charts cannot be layered.
一般来说,不能保证两个分面图会有匹配的分面可以分层,所以Vega-Lite不允许分面图分层。
解决这个问题的方法是对分层图表进行分面,而不是对多面图表进行分层。例如:
import altair as alt
from vega_datasets import data
source = data.barley()
bars = alt.Chart(source).mark_bar().encode(
x='sum(yield):Q',
y='year:O',
)
bars
text = bars.mark_text(
align='left',
baseline='middle',
dx=3 # Nudges text to right so it doesn't appear on top of the bar
).encode(
text='sum(yield):Q'
)
(bars + text).facet(row='variety:N')
在尝试向具有行的 Altair 条形图添加标签时,我收到 SchemaValidationError。我说的是像这里这样的标签: https://altair-viz.github.io/gallery/bar_chart_with_labels.html
我说的是带行或 "horizontal grouped bar charts" 的条形图,如下所示: https://altair-viz.github.io/gallery/grouped_bar_chart_horizontal.html
这是不起作用的代码:
from vega_datasets import data
source = data.barley()
bars = alt.Chart(source).mark_bar().encode(
x='sum(yield):Q',
y='year:O',
row='variety:N',
)
bars
text = bars.mark_text(
align='left',
baseline='middle',
dx=3 # Nudges text to right so it doesn't appear on top of the bar
).encode(
text='sum(yield):Q'
)
bars + text
如果我删除条形图中的行选项,它会按预期工作:
bars = alt.Chart(source).mark_bar().encode(
x='sum(yield):Q',
y='year:O'
)
bars
text = bars.mark_text(
align='left',
baseline='middle',
dx=3 # Nudges text to right so it doesn't appear on top of the bar
).encode(
text='sum(yield):Q'
)
bars + text
将行添加到 'mark_text' 方法也无济于事...
最后,我希望看到栏右侧的标签,如下所示: https://imgur.com/KFJtNkb
您的代码片段中的错误是
ValueError: Faceted charts cannot be layered.
一般来说,不能保证两个分面图会有匹配的分面可以分层,所以Vega-Lite不允许分面图分层。
解决这个问题的方法是对分层图表进行分面,而不是对多面图表进行分层。例如:
import altair as alt
from vega_datasets import data
source = data.barley()
bars = alt.Chart(source).mark_bar().encode(
x='sum(yield):Q',
y='year:O',
)
bars
text = bars.mark_text(
align='left',
baseline='middle',
dx=3 # Nudges text to right so it doesn't appear on top of the bar
).encode(
text='sum(yield):Q'
)
(bars + text).facet(row='variety:N')