如何在 Streamlit 中使用 plotly express 在 Y 轴上绘制多个值(相同单位)?
How to plot multiple values (same unit) on Y axis using plotly express in Streamlit?
我创建了 st.selectbox/multiselect 功能,我可以在 Streamlit 中选择我的 X 轴和 Y 轴。我只为 X 轴选择一列,但是我希望有这个选项来选择多个值并能够将它们绘制在 Y 轴上(使用相同的单位)。
我得到 "All arguments must have the same size" 的错误。这里有一段
代码:
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)
问题出在以下行:
fig = px.line(df, x=col_x, y=col_y)
在代码示例中,您提供了 st.selectbox
returns 列和 st.multiselect
returns 列数组(最初为空)。
y (str or int or Series or array-like) – Either a name of a column in data_frame, or a pandas Series or array_like object. Values from this column or array_like are used to position marks along the y axis in cartesian coordinates...
据我了解,这意味着当您指定 str
/ int
时,它将尝试从具有该名称/索引的列中获取数据,但是如果您指定 Series
/ array-like
结构 - 它会将该结构视为数据本身。
希望对您有所帮助!
有两种方法可以做到这一点。 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)
我创建了 st.selectbox/multiselect 功能,我可以在 Streamlit 中选择我的 X 轴和 Y 轴。我只为 X 轴选择一列,但是我希望有这个选项来选择多个值并能够将它们绘制在 Y 轴上(使用相同的单位)。 我得到 "All arguments must have the same size" 的错误。这里有一段
代码:
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)
问题出在以下行:
fig = px.line(df, x=col_x, y=col_y)
在代码示例中,您提供了 st.selectbox
returns 列和 st.multiselect
returns 列数组(最初为空)。
y (str or int or Series or array-like) – Either a name of a column in data_frame, or a pandas Series or array_like object. Values from this column or array_like are used to position marks along the y axis in cartesian coordinates...
据我了解,这意味着当您指定 str
/ int
时,它将尝试从具有该名称/索引的列中获取数据,但是如果您指定 Series
/ array-like
结构 - 它会将该结构视为数据本身。
希望对您有所帮助!
有两种方法可以做到这一点。 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)