2

尝试使用基于图表中未显示的值的条件为条形图着色。

我得到了这个数据框:

在此处输入图像描述

如果 ,我想将条形涂成绿色row.presented_value > row.coloring_value,否则涂成红色。

我通过常量值显示值看到了条件示例,但无法使其对我有用。

在下面的代码示例中,我希望两者都foobar红色。

import pandas as pd

df = pd.DataFrame({'name':['bar','foo'],
                  'presented_value':[10,20],
                  'coloring_value':[15,25]})

(alt.Chart(df, height=250, width=375).mark_bar()
 .encode(x='name', y=alt.Y('presented_value', axis=alt.Axis(orient='right')),
         color=alt.condition(alt.datum['presented_value'] > df.loc[df.name==alt.datum.x,
                                                        'coloring_value'].values[0],
        alt.value('lightgreen'),alt.value('darkred'))
        )
)

变体 1

将 的第一个值更改coloring_value<10两个条形将是绿色的,即使我只bar希望是绿色的。

df = pd.DataFrame({'name':['bar','foo'],
                  'presented_value':[10,20],
                  'coloring_value':[5,25]})

(alt.Chart(df, height=250, width=375).mark_bar()
 .encode(x='name', y=alt.Y('presented_value', axis=alt.Axis(orient='right')),
         color=alt.condition(alt.datum['presented_value'] > df.loc[df.name==alt.datum.x,
                                                        'coloring_value'].values[0],
        alt.value('lightgreen'),alt.value('darkred'))))

变体 2

仍然没有按正确的值着色。关于如何完成它的任何想法?提前致谢!

4

1 回答 1

4

条件表达式不能使用 pandas 构造;它们必须映射到vega 表达式。Altair 为此提供了alt.datumandalt.expr对象作为便利包装器。

在您的情况下,当您想比较行中的两个值时,最好的方法是直接比较它们:

(alt.Chart(df, height=250, width=375).mark_bar()
 .encode(
    x='name',
    y=alt.Y('presented_value', axis=alt.Axis(orient='right')),
    color=alt.condition(
      alt.datum.presented_value > alt.datum.coloring_value,
      alt.value('lightgreen'),
      alt.value('darkred')
    )
  )
)

在此处输入图像描述

于 2020-05-04T00:09:21.737 回答