从streamlit应用程序中的平行坐标图中获取选定的数据

问题描述 投票:0回答:1

我正在构建一个 Streamlit 应用程序,我想要一个平行坐标图,其下方有一个表格,显示所选的条目。

这是 Streamlit 中平行坐标图的示例代码:

import plotly.express as px
import streamlit as st

df = px.data.iris()
fig = px.parallel_coordinates(df, color="species_id",
                              dimensions=['sepal_width', 'sepal_length', 'petal_width',
                                          'petal_length'],
                              color_continuous_scale=px.colors.diverging.Tealrose,
                              color_continuous_midpoint=2)

st.plotly_chart(fig)

if st.button('show selection'):
    st.text(fig['data'])
    tmp_df = df # Do something here to get the selected data
    st.dataframe(tmp_df)

有关此主题的一些帖子正在使用 dash 来构建他们的平台,但这不是我的情况。我正在使用streamlit,但不完全理解他们是如何实现这一目标的。在 Streamlit 或测试笔记本中选择数据时,图中的变量“数据”不会更新,而且我不习惯在 Python 中使用回调。

我希望能够帮助您了解如何进行这项工作,或者使用替代的绘图库来实现这一点

python plotly streamlit
1个回答
0
投票

按钮没有选择值,因此必须提供输入框来获取选择值等。在这个数据示例中,有三个选择,因此使用复选框来允许选择。默认图表是选择了所有类别的图表。如果取消选择任何复选框,则图形和数据将与剩余数据一起显示。如果您想从未选中状态开始,请将复选框值设置为 false。

import plotly.express as px
import streamlit as st

df = px.data.iris()

def  get_parallel_coodi(df):
    fig = px.parallel_coordinates(df, color="species_id",
                                dimensions=['sepal_width', 'sepal_length', 'petal_width',
                                            'petal_length'],
                                color_continuous_scale=px.colors.diverging.Tealrose,
                                color_continuous_midpoint=2)
    #fig.show()
    return fig

st.write('#### Species_id')
cols = st.columns(3)

category_list = df['species_id'].unique()
category = [None]* len(category_list)
for i,s in enumerate(category_list):
    with cols[i]:
        category[i] = st.checkbox(str(s), value=True)
        #st.write(category)

dff = df[df['species_id'].isin(category_list[category])].reset_index(drop=True)
fig = get_parallel_coodi(dff)
st.plotly_chart(fig, theme="streamlit", use_container_width=True)
st.dataframe(dff)

© www.soinside.com 2019 - 2024. All rights reserved.