在下面的代码中,我们有一个数据集,可以读作:“两个厨师cook1
,cook2
在做一个比赛。他们必须做四道菜,每次用两种给定的成分ingredient1
,ingredient2
。评委会对菜肴进行评分,评分结果存储在_score
中。
我想用牛郎星来展示一个图表,其中x轴是每道菜(1,2,3,4),y轴分别包含两个厨师的分数。这目前的作品,但主要问题是,悬停,工具提示不包括分数的当前点正在悬停。
import altair as alt
import pandas as pd
df = pd.DataFrame({
"ingredient1": ["potato", "onion", "carrot", "beet"],
"ingredient2": ["tomato", "pepper", "zucchini", "lettuce"],
"dish": [1, 2, 3, 4],
"cook1": ["cook1 dish1", "cook1 dish2", "cook1 dish3", "cook1 dish4"],
"cook1_score": [0.4, 0.3, 0.7, 0.9],
"cook2": ["cook2 dish1", "cook2 dish2", "cook2 dish3", "cook2 dish4"],
"cook2_score": [0.6, 0.2, 0.5, 0.6],
})
value_vars = [c for c in df.columns if c.endswith("_score")]
cook_names = [c.replace("_score", "") for c in value_vars]
id_vars = ["dish", "ingredient1", "ingredient2",] + cook_names
df_melt = df.melt(id_vars=id_vars, value_vars=value_vars,
var_name="cook", value_name="score")
chart = alt.Chart(df_melt).mark_circle().encode(
x=alt.X("dish:O", title="Dish number"),
y=alt.Y("score:Q", title="Score"),
color="cook:N",
tooltip=id_vars
)
chart.show()
我尝试将分数列显式添加到工具提示中:
tooltip=id_vars+value_vars
但这会产生以下错误:
ValueError:cook1_score编码字段没有指定类型;无法推断该类型,因为它与数据中的任何列都不匹配。
那么我怎样才能让altair也显示(仅)当前悬停元素的得分呢?
1条答案
按热度按时间whhtz7ly1#
cook1_score
不是df_melt
中的列,这就是您看到错误的原因。设置tooltip=id_vars+['score']
将起作用。