Streamlit AssertionError:无法匹配2个标题与1张图片的排查与解决
问题
基于pm4py、pandas和Streamlit搭建流程挖掘仪表板,实现侧边栏下拉选择展示BPMN或Petri网可视化图片,编写代码如下:
import pm4py import pandas as pd import streamlit as st import graphviz st.set_page_config(page_title="Process Mining dashboard", page_icon=":chart_with_downwards_trend:", layout="wide") file_path = r'path/to/file.csv' event_log = pd.read_csv(file_path, sep=';') df = pm4py.format_dataframe(event_log, case_id = 'case_id', activity_key = 'activity', timestamp_key = 'timestamp', timest_format = '%Y-%m-%d %H:%M:%S%z') pm_image = st.container() bpmn_model = pm4py.discover_bpmn_inductive(df) bpmn = 'bpmn.png' pm4py.save_vis_bpmn(bpmn_model, bpmn) pn, im, fm = pm4py.discover_petri_net_inductive(df) petri = 'petri.png' pm4py.save_vis_petri_net(pn, im, fm, petri) images = { 'bpmn': bpmn, 'petri': petri } img = st.sidebar.selectbox("Select the visualization of the process.", list(images.keys())) with pm_image: st.image(images[img], caption=list(images.keys()))
运行代码时抛出错误:
AssertionError: Cannot pair 2 captions with 1 images.
需求是通过下拉菜单关联st.image组件展示选中的可视化图片,目前下拉菜单正常显示,但无法展示图片,需解决该问题。
解决方案
错误原因
st.image的caption参数传入了list(images.keys())(包含bpmn和petri两个元素),但当前仅传入了一张图片路径images[img],图片数量和标题数量不匹配,导致断言错误。
修改后的代码
import pm4py import pandas as pd import streamlit as st import graphviz st.set_page_config(page_title="Process Mining dashboard", page_icon=":chart_with_downwards_trend:", layout="wide") file_path = r'path/to/file.csv' event_log = pd.read_csv(file_path, sep=';') df = pm4py.format_dataframe(event_log, case_id = 'case_id', activity_key = 'activity', timestamp_key = 'timestamp', timest_format = '%Y-%m-%d %H:%M:%S%z') pm_image = st.container() bpmn_model = pm4py.discover_bpmn_inductive(df) bpmn = 'bpmn.png' pm4py.save_vis_bpmn(bpmn_model, bpmn) pn, im, fm = pm4py.discover_petri_net_inductive(df) petri = 'petri.png' pm4py.save_vis_petri_net(pn, im, fm, petri) images = { 'bpmn': bpmn, 'petri': petri } img = st.sidebar.selectbox("Select the visualization of the process.", list(images.keys())) with pm_image: # 将caption改为当前选中的选项,保证图片和标题数量匹配 st.image(images[img], caption=img)
关键修改点
把st.image的caption参数从list(images.keys())替换为img,img是用户从下拉菜单选中的选项,这样单张图片对应单个标题,参数匹配即可正常展示选中的可视化图片。
内容的提问来源于stack exchange,提问作者Tobitor
相关产品推荐
相关产品推荐

