如何在 Altair 条形图中突出显示 2 个不同颜色的条形图?
How to highlight 2 bars with different colors in an Altair bar graph?
我想在 Altair 条形图中突出显示两个不同的条形。但是,根据不同的条件,每一个都必须有不同的颜色。
基础知识:
import altair as alt
import pandas as pd
df = pd.DataFrame({"fruits": ["banana", "plum", "apple", "lime"], "values": [10, 6, 8, 5]})
plot = (
alt.Chart(df)
.mark_bar()
.encode(
x=alt.X("fruits", sort="y"),
y="values"))
apple_plot = plot.encode(color=alt.condition(alt.datum.fruits == "apple", alt.value("red"), alt.value("navy")))
banana_plot = plot.encode(color=alt.condition(alt.datum.fruits == "banana", alt.value("yellow"), alt.value("navy")))
apple_plot | banana_plot
目前的结果
我试过的
apple_banana_plot = plot.encode(
color=alt.condition(
alt.datum.fruits == "apple",
alt.value("red"),
alt.condition(
alt.datum.fruits == "banana",
alt.value("yellow"),
alt.value("navy"))))
apple_banana_plot
我得到的错误:
TypeError: type object got multiple values for keyword argument 'condition'
...这意味着我不能在另一个条件中使用条件。
我期待的结果
你可以这样做:
基本上,您使用两个参数定义 color
:
- domain - 分类列中的值列表
- 范围 - 颜色的特定值
df = pd.DataFrame({"fruits": ["banana", "plum", "apple", "lime"], "values": [10, 6, 8, 5]})
plot = (
alt.Chart(df)
.mark_bar()
.encode(
x=alt.X("fruits", sort="y"),
y="values",
color=alt.Color('fruits',
scale=alt.Scale(
domain=df.sort_values(['values'])['fruits'].tolist(),
range=['navy', 'navy', 'red', 'yellow']))))
plot
我想在 Altair 条形图中突出显示两个不同的条形。但是,根据不同的条件,每一个都必须有不同的颜色。
基础知识:
import altair as alt
import pandas as pd
df = pd.DataFrame({"fruits": ["banana", "plum", "apple", "lime"], "values": [10, 6, 8, 5]})
plot = (
alt.Chart(df)
.mark_bar()
.encode(
x=alt.X("fruits", sort="y"),
y="values"))
apple_plot = plot.encode(color=alt.condition(alt.datum.fruits == "apple", alt.value("red"), alt.value("navy")))
banana_plot = plot.encode(color=alt.condition(alt.datum.fruits == "banana", alt.value("yellow"), alt.value("navy")))
apple_plot | banana_plot
目前的结果
我试过的
apple_banana_plot = plot.encode(
color=alt.condition(
alt.datum.fruits == "apple",
alt.value("red"),
alt.condition(
alt.datum.fruits == "banana",
alt.value("yellow"),
alt.value("navy"))))
apple_banana_plot
我得到的错误:
TypeError: type object got multiple values for keyword argument 'condition'
...这意味着我不能在另一个条件中使用条件。
我期待的结果
你可以这样做:
基本上,您使用两个参数定义 color
:
- domain - 分类列中的值列表
- 范围 - 颜色的特定值
df = pd.DataFrame({"fruits": ["banana", "plum", "apple", "lime"], "values": [10, 6, 8, 5]})
plot = (
alt.Chart(df)
.mark_bar()
.encode(
x=alt.X("fruits", sort="y"),
y="values",
color=alt.Color('fruits',
scale=alt.Scale(
domain=df.sort_values(['values'])['fruits'].tolist(),
range=['navy', 'navy', 'red', 'yellow']))))
plot