Я следую этому примеру, чтобы создать гистограмму с условным форматированием цвета на отрицательных значениях:

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 выражением, принимающим имя динамической переменной, например, разные столбцы данных?

1
AleAve81 20 Дек 2019 в 18:00

1 ответ

Лучший ответ

Python предоставляет функцию getattr, которая позволяет получить динамический атрибут из любого объекта Python, поэтому вы можете использовать getattr(alt.datum, col_name) для получения динамического имени столбца из объекта alt.datum.

Но, вероятно, проще указать условие фильтра непосредственно в виде строки; что-то вроде этого (который использует F- строка ) :

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")

enter image description here

2
jakevdp 21 Дек 2019 в 14:59