pandas Altair:在工具提示中显示当前点的值

qhhrdooz  于 2023-06-04  发布在  其他
关注(0)|答案(1)|浏览(259)

在下面的代码中,我们有一个数据集,可以读作:“两个厨师cook1cook2在做一个比赛。他们必须做四道菜,每次用两种给定的成分ingredient1ingredient2。评委会对菜肴进行评分,评分结果存储在_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也显示(仅)当前悬停元素的得分呢?

whhtz7ly

whhtz7ly1#

cook1_score不是df_melt中的列,这就是您看到错误的原因。设置tooltip=id_vars+['score']将起作用。

相关问题