Altair - 映射错误的颜色值

Altair - mapping wrong color values

Altair

开始于:

df_top_5 = df.sort_values('Mean', ascending=False)

然后重新设置 altair 的索引,它只接受列

df_top_5 = df_top_5.reset_index()

我打印:

df_top_5:

top 5                       Player      Mean    Color
0  Pierre-Emerick Aubameyang  0.629630  #EF0107
1              Sergio Aguero  0.592593  #97C1E7
2                 Danny Ings  0.555556  #ED1A3B
3              Mohamed Salah  0.538462  #CE1317
4                 Sadio Mane  0.500000  #CE1317

并将 top_5 传递给图表,如下所示:

top_bars = alt.Chart(top_5).mark_bar().encode(
            alt.Y('Player:N'),
            alt.X('Mean:Q'),
            alt.Color('Color', legend=None),
            tooltip = [alt.Tooltip('Player:N'),
                       alt.Tooltip('Mean:Q')],
        )

尽管上面数据框中的地图是 100% 正确的,但颜色被错误地映射到每个玩家。

Matplotlib

如果我从与 matplotlib 相同的点开始:

top_5 = df.sort_values('Mean', ascending=False)

以 'Player' 作为索引打印:

Player                                      
Pierre-Emerick Aubameyang  0.629630  #EF0107
Sergio Aguero              0.592593  #97C1E7
Danny Ings                 0.555556  #ED1A3B
Mohamed Salah              0.538462  #CE1317
Sadio Mane                 0.500000  #CE1317

并传递给情节:

# build axis
Y = top_5.index[::-1]
X = top_5['Mean'][::-1]
C = top_5['Color'][::-1]
# plot config
plt.rcParams["figure.facecolor"] = 'white'
plt.figure(figsize=(10,8))
plt.barh(Y, X, height=0.4, color=C)

一切正常。


altair 我错过了什么?

除非您指定 scale=None:

,否则 Altair 会自动为您的输入生成色标
import altair as alt
import pandas as pd
top_5 = pd.DataFrame({
    "Player": ["Pierre-Emerick Aubameyang", "Sergio Aguero", "Danny Ings", "Mohamed Salah", "Sadio Mane"],
    "Mean": [0.629630, 0.592593, 0.555556, 0.538462, 0.500000],
    "Color": ["#EF0107", "#97C1E7", "#ED1A3B", "#CE1317", "#CE1317"]
})
alt.Chart(top_5).mark_bar().encode(
    alt.Y('Player:N'),
    alt.X('Mean:Q'),
    alt.Color('Color', scale=None),
    tooltip = [alt.Tooltip('Player:N'),
                alt.Tooltip('Mean:Q')],
)

有关详细信息,请参阅 https://altair-viz.github.io/user_guide/customization.html#raw-color-values