简体   繁体   English

Altair alt.condition 中的动态名称

[英]dynamic name in Altair alt.condition

I am following this example to create a bar chart with conditional color formatting on negative values:我正在按照此示例创建一个条形图,该条形图带有负值的条件颜色格式:

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)

How can I replace alt.datum.nonfarm_change with an expression accepting a dynamic variable name eg different columns of a dataframe?如何用接受动态变量名称的表达式替换alt.datum.nonfarm_change ,例如数据帧的不同列?

Python provides a getattr function that lets you get a dynamic attribute from any Python object, so you could use getattr(alt.datum, col_name) to get a dynamic column name from the alt.datum object. Python 提供了一个getattr函数,可让您从任何 Python 对象获取动态属性,因此您可以使用getattr(alt.datum, col_name)alt.datum对象获取动态列名。

But it's probably easier to specify your filter condition as a string directly;但直接将过滤条件指定为字符串可能更容易; something like this (which makes use of f-strings ):像这样(使用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")

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM