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。
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
:
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。