【问题标题】:dynamic name in Altair alt.conditionAltair alt.condition 中的动态名称
【发布时间】:2020-04-13 02:07:38
【问题描述】:

我正在按照这个示例创建一个带有负值条件颜色格式的条形图:

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 替换为接受动态变量名称的表达式,例如数据框的不同列?

【问题讨论】:

  • 不清楚你在问什么。 “动态变量名”是什么意思?能举个例子吗?
  • 我的意思是我希望能够将变量的名称作为参数传递,而不是硬编码它。想象一下,我的绘图嵌入在一个函数中,该函数返回绘图 JSON 表示,并且该函数接受一个变量作为输入参数。假设变量名为 var and ,我该怎么做 alt.datum.var ?

标签: python charts data-visualization vega altair


【解决方案1】:

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

【讨论】:

  • 现在如果列名有空格怎么办? “利润损失”。我正在尝试 alt.datum.["Profit Loss"] > 0 或 alt.datum.str("Profit Loss") ...如何在名称中有空格的情况下使用列名?谢谢
  • 使用括号表示法:alt.datum['Profit Loss']
  • 是否可以绘制在 alt.Condition() 例程中指定的颜色的图例。在此示例中,值为
猜你喜欢
  • 1970-01-01
  • 2018-06-16
  • 2011-12-03
  • 2015-05-11
  • 1970-01-01
  • 2015-01-23
  • 2012-10-28
  • 2016-04-30
  • 2011-07-12
相关资源
最近更新 更多