亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Altair 直接標記線圖

使用 Altair 直接標記線圖

月關寶盒 2023-12-20 16:14:38
我正在 Altair (4.1.0) 中繪制折線圖,并希望使用直接標簽(注釋)而不是常規圖例。因此,每條線(例如時間序列)的文本標記應該僅出現一次,并且出現在 x 軸的最右點(與標記每個數據點的散點圖示例相反)。雖然我可以使用 pandas 來操作數據以獲得所需的結果,但我認為使用純 Altair 實現會更優雅,但我似乎無法正確實現。例如,給定以下數據:import numpy as npimport pandas as pdimport altair as altnp.random.seed(10)time = pd.date_range(start="10/21/2020", end="10/22/2020", periods=n)data = pd.concat([    pd.DataFrame({        "time": time,        "group": "One",        "value": np.random.normal(10, 2, n)}),    pd.DataFrame({        "time": time,        "group": "Two",        "value": np.random.normal(5, 2, n)}).iloc[:-1]], ignore_index=True)我可以使用 pandas 創建一個包含每個組的最后時間點的子集來生成令人滿意的結果:lines = alt.Chart(data).mark_line(    point=True).encode(    x="time:T",    y="value:Q",    color=alt.Color("group:N", legend=None),  # Remove legend)text_data = data.loc[data.groupby('group')['time'].idxmax()]  # Subset the data for text positionslabels = alt.Chart(text_data).mark_text(    # some adjustments).encode(    x="time:T",    y="value:Q",    color="group:N",    text="group:N")chart = lines + labels但是,如果我嘗試使用主數據并添加 Altair 聚合(例如使用x=max(time)或explicit transform_aggregate()),我要么在所有點上獲得文本注釋,要么根本沒有(分別)。有沒有更好的方法來獲得上述結果?
查看完整描述

1 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

您可以使用argmaxy 編碼中的聚合來執行此操作。例如,您的標簽層可能如下所示:


labels = alt.Chart(data).mark_text(

    align='left', dx=5

).encode(

    x='max(time):T',

    y=alt.Y('value:Q', aggregate={'argmax': 'time'}),

    text='group:N',

    color='group:N',

)

https://img1.sycdn.imooc.com/6582a2e70001676d04660339.jpg

查看完整回答
反對 回復 2023-12-20
  • 1 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號