如何在流光中缓存绘图?

Posted

技术标签:

【中文标题】如何在流光中缓存绘图?【英文标题】:How to cache a plot in streamlit? 【发布时间】:2021-10-27 05:39:16 【问题描述】:

我在 streamlit 中构建了一个仪表板,您可以在其中选择一个 client_ID 并显示 SHAP 图(瀑布图和力图)来解释该客户的信用违约预测。

我还想显示包含整个火车数据集的 SHAP 汇总图。后面每次做新的预测时都不会改变,而且要花很多时间来绘制,所以我想缓存它。我想最好的方法是使用 st.cache 但我无法做到。

下面是我在 main.py 中尝试失败的代码: 我首先定义要缓存输出的函数(图),然后在 st.pyplot 中执行输出。它可以在没有 st.cache 装饰器的情况下工作,但只要我添加它并重新运行应用程序,函数 summary_plot_all 就会无限期运行

在:

@st.cache    
def summary_plot_all():
    fig, axes = plt.subplots(nrows=1, ncols=1)
    shap.summary_plot(shapvs[1], prep_train.iloc[:, :-1].values, 
    prep_train.columns, max_display=50)
    return fig
    
st.pyplot(summary_plot_all())

OUT(在流光应用中显示)

运行 summary_plot_all()。

有谁知道在 streamlit 中缓存绘图有什么问题或更好的方法?

version of packages:
streamlit==0.84.1, 
matplotlib==3.4.2, 
shap==0.39.0

【问题讨论】:

【参考方案1】:

试试

import matplotlib

@st.cache(hash_funcs=matplotlib.figure.Figure: lambda _: None)
def summary_plot_all():
    fig, axes = plt.subplots(nrows=1, ncols=1)
    shap.summary_plot(shapvs[1], prep_train.iloc[:, :-1].values, 
    prep_train.columns, max_display=50)
    return fig

检查这个streamlitgithub issue

【讨论】:

以上是关于如何在流光中缓存绘图?的主要内容,如果未能解决你的问题,请参考以下文章

如何清除特定的流光缓存?

如何在流光中将文本泵入滚动窗口?

如何使用 CgLayer 进行最佳绘图

在 R markdown 中,如何防止非缓存块的图被单独保存?

Unity ShaderSpecial EffectsBorderFlow 边框流动(UI)

Unity ShaderSpecial EffectsBorderFlow 边框流动(UI)