Altair 为条形图设置常量标签颜色
Altair setting constant label color for bar chart
在Altair中为条形图设置标签的例子在官网这里有:https://altair-viz.github.io/gallery/bar_chart_with_labels.html
但是,一旦您想要将条件条形图中的 "color" 参数设置为变量,标签颜色将自动匹配条形的颜色,如下图所示。但是,我的意图是始终保持标签颜色不变,例如黑色。如果您想将标签显示为百分比,这对于堆叠条形图尤其适用。似乎在 mark_text 中设置 "color='black'" 在这里不起作用;可能是因为它基于 "bars",它使用 "color" 参数作为 "year"。但是我找不到一种直观的方法来解耦这个参数。
import altair as alt
from vega_datasets import data
source = data.wheat()
bars = alt.Chart(source).mark_bar().encode(
x='wheat:Q',
y="year:O",
color='year:O'
)
text = bars.mark_text(
align='left',
baseline='middle',
color='black',
dx=3 # Nudges text to right so it doesn't appear on top of the bar
).encode(
text='wheat:Q'
)
(bars + text).properties(height=900)
Bar chart with Variable Label Colors
Stacked Bar Chart Example with coloured labels
当您执行 bars.mark_text()
时,生成的图表会继承您在条形图中指定的所有内容,包括颜色编码。为避免文本使用颜色编码,最好的方法是确保它不继承颜色编码。
例如:
import altair as alt
from vega_datasets import data
source = data.wheat()
base = alt.Chart(source).encode(
x='wheat:Q',
y="year:O"
)
bars = base.mark_bar().encode(
color='year:O'
)
text = base.mark_text(
align='left',
baseline='middle',
dx=3 # Nudges text to right so it doesn't appear on top of the bar
).encode(
text='wheat:Q'
)
(bars + text).properties(height=900)
mark_text(color='black')
没有在您的代码段中覆盖编码的原因是颜色编码优先于标记属性,如 Global Config vs. Local Config vs. Encoding 中所述。
在Altair中为条形图设置标签的例子在官网这里有:https://altair-viz.github.io/gallery/bar_chart_with_labels.html
但是,一旦您想要将条件条形图中的 "color" 参数设置为变量,标签颜色将自动匹配条形的颜色,如下图所示。但是,我的意图是始终保持标签颜色不变,例如黑色。如果您想将标签显示为百分比,这对于堆叠条形图尤其适用。似乎在 mark_text 中设置 "color='black'" 在这里不起作用;可能是因为它基于 "bars",它使用 "color" 参数作为 "year"。但是我找不到一种直观的方法来解耦这个参数。
import altair as alt
from vega_datasets import data
source = data.wheat()
bars = alt.Chart(source).mark_bar().encode(
x='wheat:Q',
y="year:O",
color='year:O'
)
text = bars.mark_text(
align='left',
baseline='middle',
color='black',
dx=3 # Nudges text to right so it doesn't appear on top of the bar
).encode(
text='wheat:Q'
)
(bars + text).properties(height=900)
Bar chart with Variable Label Colors
Stacked Bar Chart Example with coloured labels
当您执行 bars.mark_text()
时,生成的图表会继承您在条形图中指定的所有内容,包括颜色编码。为避免文本使用颜色编码,最好的方法是确保它不继承颜色编码。
例如:
import altair as alt
from vega_datasets import data
source = data.wheat()
base = alt.Chart(source).encode(
x='wheat:Q',
y="year:O"
)
bars = base.mark_bar().encode(
color='year:O'
)
text = base.mark_text(
align='left',
baseline='middle',
dx=3 # Nudges text to right so it doesn't appear on top of the bar
).encode(
text='wheat:Q'
)
(bars + text).properties(height=900)
mark_text(color='black')
没有在您的代码段中覆盖编码的原因是颜色编码优先于标记属性,如 Global Config vs. Local Config vs. Encoding 中所述。