如何使用多选动态绘制 Streamlit 中的比较?

How to plot comparison in Streamlit dynamically with multiselect?

我用 streamlit 创建了一个比较应用程序,我想动态比较它。

这是我写的代码

import streamlit as st
import matplotlib.pyplot as plt
import pandas as pd

sampel_data={'Company':['A','B','C','D','E','F','G','H','I','J'],
             'Profit':[3,4.5,2,2.5,1.25,3,3.25,5,6,2.75]}
df_sampel=pd.DataFrame(data=sampel_data)
st.dataframe(df_sampel)
option1=st.multiselect("Choose company to compare",df_sampel)
st.write(len(option1))
fig,ax=plt.subplots()
plt.bar(option1,height=10)
st.pyplot(fig)

我的问题是如何显示利润,因为 x/horizontal 部分显示正确,但是 y/vertical 部分显示不正确。

你的身高参数有误。看看这里 https://matplotlib.org/3.5.1/api/_as_gen/matplotlib.pyplot.bar.html.

根据所选公司定义数据框并将其作为您的身高。

代码

import streamlit as st
import matplotlib.pyplot as plt
import pandas as pd

sampel_data={'Company':['A','B','C','D','E','F','G','H','I','J'],
             'Profit':[3,4.5,2,2.5,1.25,3,3.25,5,6,2.75]}
df_sampel=pd.DataFrame(data=sampel_data)
st.dataframe(df_sampel)
option1=st.multiselect("Choose company to compare",df_sampel)
st.write(len(option1))

df = df_sampel.copy()
df1 = df.set_index('Company')
df1 = df1.loc[option1]  # New dataframe based on option1

fig,ax=plt.subplots()
plt.bar(x=option1, height=df1['Profit'])
st.pyplot(fig)

示例输出