如何解决如何从Altair中的选定基准中检索属性?
我有一个Streamlit仪表板,它使我可以使用altair图交互式地探索t-SNE嵌入。我试图弄清楚如何访问选定基准的元数据,以便可以可视化相应的图像。换句话说,给定:
selector = alt.selection_single()
chart = (
alt.Chart(df)
.mark_circle()
.encode(x="tSNE_dim1",y="tSNE_dim2",color="predicted class",tooltip=["image url","predicted class"])
.add_selection(selector)
)
...有什么类似于
selected_Metadata = selector.tooltip
update_dashboard_img(img=selected_Metadata["image url"],caption=selected_Metadata["predicted class"])
我知道image marks,但是图像在S3上,并且其中太多以至于无法容纳在图中。
解决方法
不幸的是,Altair没有提供任何机制来将信息从javascript渲染传递回Python内核,因此通常无法做您想做的事情。
(编辑:streamlit对此有一个解决方案,如果您使用他们的平台,则可以使用,但我不知道有任何通常适用的解决方案)。
,我不想与Altair的创建者不同意,但是我能够使用streamlit-vega-lite package实现这一目标。这可以通过使用altair_component()
将对图表创建函数的调用进行包装来完成:
from streamlit_vega_lite import altair_component
...
event_dict = altair_component(altair_chart=create_tsne_chart(tsne_df))
# note: works with selector = alt.selection_interval(),not selection_single()
dim1_bounds,dim2_bounds = event_dict.get("dim1"),event_dict.get("dim2")
if dim1_bounds:
(dim1_min,dim1_max),(dim2_min,dim2_max) = dim1_bounds,dim2_bounds
selected_images = tsne_df[
(tsne_df.dim1 >= dim1_min)
& (tsne_df.dim1 <= dim1_max)
& (tsne_df.dim2 >= dim2_min)
& (tsne_df.dim2 <= dim2_max)
]
st.write("Selected Images")
st.write(selected_images)
if len(selected_images) > 0:
for _index,row in selected_images.iterrows():
img = get_img(row["image url"])
st.image(img,caption=f"{row['image url']} {row['predicted class']}",use_column_width=True)
event_dict
仅包含有关selector
范围的信息。因此,您必须使用这些值来重新选择在交互式图表中选择的数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。