【问题标题】:How to plot multiple values (same unit) on Y axis using plotly express in Streamlit?如何在 Streamlit 中使用 plotly express 在 Y 轴上绘制多个值(相同单位)?
【发布时间】:2020-04-26 10:43:13
【问题描述】:

我创建了 st.selectbox/multiselect 功能,我可以在 Streamlit 中选择我的 X 轴和 Y 轴。我只为 X 轴选择一列,但是我希望有这个选项来选择多个值并能够在 Y 轴上绘制它们(使用相同的单位)。 我收到“所有参数必须具有相同大小”的错误。这是一段

代码:

all_columns_names = df.columns.tolist()

col_x = st.selectbox('Which Feature on X axis?', all_columns_names)

col_y = st.multiselect('Which Feature on Y axis?', all_columns_names)

fig = px.line(df, x =col_x,y=col_y)

st.plotly_chart(fig)

【问题讨论】:

    标签: python plotly streamlit


    【解决方案1】:

    有两种方法可以做到这一点。 Y轴单位相同:

    st.line_chart(df.set_index(col_x)[col_y])

    在 Y 轴上使用不同的单位,我更喜欢这个并且更有意义:

    fig = make_subplots(rows=len(col_y), cols=1, shared_xaxes=True, vertical_spacing=0.03)
    
    for i in range(len(col_y)):
    
        fig.add_trace(go.Line(x = df[col_x], y = df[col_y[i]],name=col_y[i]),row=len(col_y)-i, col=1)
    
    st.plotly_chart(fig)
    

    【讨论】:

      【解决方案2】:

      问题在于以下行:

      fig = px.line(df, x=col_x, y=col_y)
      

      在您提供的代码示例中,st.selectbox 返回一个列,st.multiselect 返回一个列数组(最初为空)。

      来自Plotly Express Line API

      y (str or int or Series or array-like) – data_frame 中列的名称,或者 pandas Series 或 array_like 对象。此列或 array_like 中的值用于在笛卡尔坐标中沿 y 轴定位标记...

      据我了解,这意味着当您指定 str / int 时,它将尝试从具有该名称/索引的列中获取数据,但如果您指定 Series / array-like 结构 - 它会将该结构视为数据本身。

      我希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2020-10-26
        • 2020-01-28
        • 2020-11-01
        • 2021-11-14
        • 1970-01-01
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        • 2020-12-14
        相关资源
        最近更新 更多