我正在构建一个 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 中使用回调。
我希望能够帮助您了解如何进行这项工作,或者使用替代的绘图库来实现这一点
按钮没有选择值,因此必须提供输入框来获取选择值等。在这个数据示例中,有三个选择,因此使用复选框来允许选择。默认图表是选择了所有类别的图表。如果取消选择任何复选框,则图形和数据将与剩余数据一起显示。如果您想从未选中状态开始,请将复选框值设置为 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)