Skip to main content
 首页 » 编程设计

python之结合 Jupyter rich display 和 matplotlib 图表

2025年05月04日31webabcd

我想要一段代码(一个分析模型)来生成一系列 Jupter 输出,这样当模块在 Jupyter Notebook 中运行时,它会向笔记本输出许多表格、HTML 输出和 matplotlib 图表,在一个特定的订单。

这个想法是模型存储了一个对象列表,我们稍后可以遍历它,显示每个对象。

我已经设法使用表格和 HTML 使用如下代码:

from IPython.display import display 
from IPython.display import HTML, Image 
 
a = df.head(1) 
b = HTML("<p>Hello</p>") 
c = df.head(2) 
 
display(a) 
display(b) 
display(c) 
 
#A more general case would be: 
for i in [a,b,c]: 
    display(i) 

但是,我无法使 matplotlib 图表(例如使用 df.plot() )以正确的顺序出现。调用 plt.show() 使我能够以正确的顺序输出单个图表,但如果有多个图表,似乎对我没有帮助。

我设法实现的解决方法是将 matplotlib 图表输出到 .png,然后使用 Image 显示这些 png 图像。但是,如果可以的话,我宁愿避免将大量 .png 图表输出到文件中。

所有这一切背后的想法是,它允许我用 Python 编写的分析模型输出一种“丰富”版本的日志记录,您可以在其中“记录”表格或图表。

请您参考如下方法:

你也可以这样做:

df = pd.DataFrame({'a':[1,2,3],'b':[3,2,1]}) 
plt.interactive(False) # This will prevent matplotlib from showing the plots immediately  
# You would want to create placeholders for different figures to show: 
fig1, ax1 = plt.subplots()   
fig2, ax2 = plt.subplots() 
# Then place your plots on the relevant placeholders: 
df.a.plot(ax=ax1) 
df.b.plot(ax=ax2) 

添加您的原始代码:

a = df.head(1) 
b = HTML("<p>Hello</p>") 
c = df.head(2) 
 
for i in [a,b,fig1,c,fig2]: 
    display(i) 

这使得表格、文本、图形的顺序符合要求: