Take Your Time

仕事や研究、コンピューターとの付き合い方

st.selectboxやst.radioとグラフを連動させる

streamlitアプリでユーザーの選択によって表示するグラフを変えたい。 例えば、selectboxやradioにはon_changeという引数があるので、

def draw(item_name):
    ax.plot(df.query(f"item == {item_name}"))
    return ax

item_name = st.selectbox(item_name, options = ["food", "furniture", "drink"], on_change=draw, args = (item_name))
fig = flt.figure()
ax = fig.add_subplot(1,1,1)
st.pyplot(fig)

とやってみてもうまくargsが引き渡せず動かなかった。

ところが、on_changeをやめて

def draw(item_name):
    ax.plot(df.query(f"item == {item_name}"))
    return ax

item_name = st.selectbox(item_name, options = ["food", "furniture", "drink"])
fig = flt.figure()
ax = fig.add_subplot(1,1,1)
draw(item_name)
st.pyplot(fig)

これで、selectboxが呼び出されるたびにdrawが呼び出されて動的に描写が変わる。 on_changeの意味がいまいちわからない