Как построить несколько значений (одинаковую единицу) на оси Y, используя график express в Streamlit? - PullRequest
1 голос
/ 08 января 2020

Я создал st.selectbox / multiselect функцию, с помощью которой я могу выбрать оси X и Y в Streamlit. Я выбираю только один столбец для оси 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)

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Есть два способа сделать это. С той же единицей на оси 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)
0 голосов
/ 09 января 2020

Проблема заключается в следующей строке:

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

В предоставленном вами примере кода st.selectbox возвращает столбец, а st.multiselect возвращает массив столбцов (изначально пустой).

From Plotly Express Line API :

y (str или int, или Series, или как массив) - либо имя столбца в data_frame, либо pandas Серия или массив_подобного объекта. Значения из этого столбца или array_like используются для позиционирования меток вдоль оси y в декартовых координатах ...

Насколько я понимаю, это означает, что при указании str / int он будет пытаться чтобы получить данные из столбца с этим именем / индексом, но если вы укажете структуру Series / array-like - она ​​будет считать эту структуру данными.

Надеюсь, это поможет!

...