首页 > 编程问答 >有没有办法获得最后的 Matplotlib 图?

有没有办法获得最后的 Matplotlib 图?

时间:2024-07-31 11:50:03浏览次数:9  
标签:python matplotlib streamlit pandasai

我有一个前端调用一个名为streamlit的包,如果我调用该函数,它将生成最新的Matplotlib对象 st.pyplot()

但是,我想获得实际的 fig 对象,因为我想单独存储。我面临的问题是 fig 是由另一个名为 Pandasai 的包创建的。 (即,我从来不需要导入 matplotlib 包)。

所以基本上我想在我的环境中全局查找无花果对象。

我尝试导入 Matplotlib 但我认为这不是正确的解决方案,因为它可能只是覆盖了实际的对象。

我也尝试使用 plt.gcf() 并将对象以这种方式附加到消息中

a = plt.gcf()

st.session_state.messages.append({"role": "assistant", "content": a})

但是在我要求 pandasai 生成另一个图表后,图表变成了空白

enter image description here


你几乎找到了! plt.gcf() 的问题在于,如果还没有图形,它会创建一个新的图形。这就是为什么在获得第二个图形后,第一个图形会变成空白的原因。

以下是一些关于如何在不直接修改 PandasAI 或 Matplotlib 的情况下获取由 PandasAI 生成的 Matplotlib 图形对象的解决方法:

1. 使用 matplotlib._pylab_helpers

Matplotlib 将创建的图形存储在一个内部列表中。你可以访问此列表以获取最新的图形,而无需依赖 plt.gcf()

```python import matplotlib._pylab_helpers

def get_latest_fig(): figures = matplotlib._pylab_helpers.Gcf.get_all_fig_managers() if figures: return figures[-1].canvas.figure return None

# ...你的 PandasAI 代码生成一个图形...

fig = get_latest_fig() st.session_state.messages.append({"role": "assistant", "content": fig}) ```

此方法从 Matplotlib 的内部结构中获取图形,但它不依赖于可能改变的特定函数或属性名称。

2. Monkey Patching (不推荐,但可能有用)

如果你确定 PandasAI 使用了一个特定的函数来创建图形,你可以 monkey patch 该函数来存储图形对象以供以后使用。 警告: 这种方法依赖于 PandasAI 的内部结构,如果 PandasAI 更新,可能会失效。

```python import pandasai

original_plot_function = pandasai.DataFrame.plot # 假设 PandasAI 使用 DataFrame.plot

def patched_plot_function(self, args, kwargs): global latest_fig latest_fig = original_plot_function(self, args, **kwargs) return latest_fig

pandasai.DataFrame.plot = patched_plot_function

# ... 你的 PandasAI 代码生成一个图形 ...

fig = latest_fig st.session_state.messages.append({"role": "assistant", "content": fig}) ```

此方法用一个新版本替换了 PandasAI 中的 plot 函数,该版本存储了图形对象并将其返回。

请记住,这些解决方法依赖于 Matplotlib 和 PandasAI 的内部行为。如果这些库发生变化,这些解决方法可能需要调整。 ideal 的解决方案是让 PandasAI 提供一种直接访问生成的图形对象的本地方法。

标签:python,matplotlib,streamlit,pandasai
From: 78814137

相关文章

  • 三种语言实现差分(C++/Python/Java)
    题目输入一个长度为n的整数序列。接下来输入m个操作,每个操作包含三个整数l,r,c表示将序列中[l,r]之间的每个数加上c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数序列。接下来m行,每行包含三个整数l,r,c,表......
  • Python编程的16个坏习惯
    1、手动进行字符串格式化#坏习惯name="Alice"greeting = "Hello, " + name +"!" #好习惯name="Alice"greeting=f"Hello,{name}!" 理由:使用+进行字符串拼接会导致代码可读性差,而且在复杂情况下容易出错,f-string可读性更好 2、手动关闭文件#坏习惯......
  • Flask框架入门:快速搭建轻量级Python网页应用
    转载: Flask框架入门:快速搭建轻量级Python网页应用1. Flask基础Flask是一个使用Python编写的轻量级Web应用框架。它的设计目标是让Web开发变得快速简单,同时保持应用的灵活性。Flask依赖于两个外部库:Werkzeug和Jinja2,Werkzeug作为WSGI工具包处理Web服务的底层细节,Jinja2作为......
  • 我有一个“pywhatkit”python 模块属性错误。你能帮我吗?
    Pywhatkit已成功安装,但在任何属性代码中都显示属性错误。我可以修复它吗?我尝试过的代码:importpywhatkitpywhatkit.sendmsg('071*******','Ado',15,48)我如何修复这个问题:我将程序文件名“pywhatkit.py”重命名为“anotername.py”。谢谢所有帮......
  • 如何使用Python获取Excel文件中嵌入图像的位置?
    我正在使用包含嵌入图像的Excel文件(.xlsx)。我需要使用Python以编程方式提取这些图像的位置(单元格引用)。这是我到目前为止所尝试过的:任何建议将不胜感激。使用openpyxl和openpyxl-image-loader:我没有处理嵌入图像。解压缩Excel文件并检查内容:......
  • cmd输入python直接弹出windows应用商店
    明明已经安装好了python,并且也确认配置好了python的环境变量,但是在cmd里输入python后,直接弹出windows商店,python获取界面,其实只需要关闭系统里的应用执行别名设置,最近出来的电脑系统里是自带开启了python相关的执行别名。步骤是【设置】-【应用】-【高级应用设计】-【应用执行名称......
  • Python 数学问题:(2**3+(5+6)**(1+1)) =?
    (2**3+(5+6)**(1+1))=?如果您能提供一步一步的解决方案,我将不胜感激。计算机向我展示了答案,但我只是不知道它是如何得出的。所以,如果可以的话,让我知道就太好了。我已经被“**”部分困住了,而且也对“3”的用途感到困惑。我尝试了这个问题,得到了131,但这不是答案。让我......
  • Python - Generators
    Thetaskofimplementingiteratorscanbesimplifiedbyusinggenerators.Wehaveseenhowtocreatecustomiteratorsusingtheobject-orientedway,i.e.,bydefiningaclassthathas__init__,__next__,and__iter__methods.Forexample,wesawtheCubes......
  • Python应用—加密、解密文件
    1.创作需求日常生活中我们有很多文件想要保密。这个脚本可以方便大家对所有的文件类型进行加密,解密。最大程度保护我们的隐私。2.话不多说,直接上代码fromcryptography.fernetimportFernetimportdocx#加密defencrypt_file(filename):#生成密钥key=Fer......
  • 三种语言实现二维前缀和(C++/Python/Java)
    题目输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1,y1,x2,y2表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入格式第一行包含三个整数n,m,q接下来n行,每行包含m个整数,表示整数矩阵。接下来q行,每行包含四个整数......