Altair 中的动态名称 alt.condition
dynamic name in Altair alt.condition
我按照这个例子来创建一个条形图,在负值上使用条件颜色格式:
import altair as alt
from vega_datasets import data
source = data.us_employment()
alt.Chart(source).mark_bar().encode(
x="month:T",
y="nonfarm_change:Q",
color=alt.condition(
alt.datum.nonfarm_change > 0,
alt.value("steelblue"), # The positive color
alt.value("orange") # The negative color
)
).properties(width=600)
如何用接受动态变量名称的表达式替换 alt.datum.nonfarm_change
,例如数据框的不同列?
Python 提供了一个 getattr
函数,可以让您从任何 Python 对象中获取动态属性,因此您可以使用 getattr(alt.datum, col_name)
从中获取动态列名alt.datum
对象。
但直接将过滤条件指定为字符串可能更容易;像这样的东西(使用 f-strings):
import altair as alt
from vega_datasets import data
def plot_column(col_name: str) -> alt.Chart:
source = data.us_employment()
return alt.Chart(source).mark_bar().encode(
x="month:T",
y=f"{col_name}:Q",
color=alt.condition(
f"datum.{col_name} > 0",
alt.value("steelblue"), # The positive color
alt.value("orange") # The negative color
)
).properties(width=600)
plot_column("nonfarm_change")
我按照这个例子来创建一个条形图,在负值上使用条件颜色格式:
import altair as alt
from vega_datasets import data
source = data.us_employment()
alt.Chart(source).mark_bar().encode(
x="month:T",
y="nonfarm_change:Q",
color=alt.condition(
alt.datum.nonfarm_change > 0,
alt.value("steelblue"), # The positive color
alt.value("orange") # The negative color
)
).properties(width=600)
如何用接受动态变量名称的表达式替换 alt.datum.nonfarm_change
,例如数据框的不同列?
Python 提供了一个 getattr
函数,可以让您从任何 Python 对象中获取动态属性,因此您可以使用 getattr(alt.datum, col_name)
从中获取动态列名alt.datum
对象。
但直接将过滤条件指定为字符串可能更容易;像这样的东西(使用 f-strings):
import altair as alt
from vega_datasets import data
def plot_column(col_name: str) -> alt.Chart:
source = data.us_employment()
return alt.Chart(source).mark_bar().encode(
x="month:T",
y=f"{col_name}:Q",
color=alt.condition(
f"datum.{col_name} > 0",
alt.value("steelblue"), # The positive color
alt.value("orange") # The negative color
)
).properties(width=600)
plot_column("nonfarm_change")