未显示按值的 Altair 颜色条形图
Altair color bar chart by value not presented
尝试使用基于图表中未显示的值的条件为条形图着色。
我得到了这个数据框:
如果 row.presented_value > row.coloring_value
,我想将条形图涂成绿色,否则涂成红色。
我看到了 and by 的条件示例,但无法使它对我有用。
在下面的代码示例中,我希望 foo
和 bar
都为红色。
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'))
)
)
将 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'))))
仍然没有按正确的值着色。关于如何完成它的任何想法?
提前致谢!
条件表达式不能使用pandas结构;他们必须映射到 vega expressions。 Altair 为此提供了 alt.datum
和 alt.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')
)
)
)
尝试使用基于图表中未显示的值的条件为条形图着色。
我得到了这个数据框:
如果 row.presented_value > row.coloring_value
,我想将条形图涂成绿色,否则涂成红色。
我看到了
在下面的代码示例中,我希望 foo
和 bar
都为红色。
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'))
)
)
将 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'))))
仍然没有按正确的值着色。关于如何完成它的任何想法? 提前致谢!
条件表达式不能使用pandas结构;他们必须映射到 vega expressions。 Altair 为此提供了 alt.datum
和 alt.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')
)
)
)