You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter Notebook(RISE)中Matplotlib绘图与Markdown并排展示报错求助

解决Jupyter Notebook(RISE)中Matplotlib绘图与Markdown文本并排展示的错误

问题原因

你碰到的TraitError是因为ipywidgets.Box的子元素必须是标准的ipywidgets组件,而直接传入matplotlib的Figure对象不符合要求——它不是widget类型,所以触发了类型校验错误。

解决方案

需要把matplotlib绘图包装成ipywidgets支持的组件,同时修正原代码里的语法错误(Markdown字符串未闭合),具体步骤:

  • 用ipywidgets.Output组件承载matplotlib图表
  • 在Output的上下文管理器中绘制并显示图表
  • 使用widgets.Markdown直接渲染Markdown文本(比转HTML更简洁)
  • 把包装好的图表组件和Markdown组件放入Box实现并排布局

修改后的完整代码

from ipywidgets import widgets, Layout
from IPython.display import display
import numpy as np
import matplotlib.pyplot as plt

def func(x, a, b, c, d):
    return a + b*np.exp(c*x + d)

the_x = np.arange(0, 10, 0.5)
the_y = func(the_x, 1, 1, -1, 2)

# 创建Output组件承载matplotlib绘图
plot_output = widgets.Output()
with plot_output:
    fig, ax = plt.subplots()
    ax.plot(the_x, the_y)
    plt.show()  # 在Output中显示图表

len_x = len(the_x)

# 直接用widgets.Markdown渲染文本
mdout = widgets.Markdown(f"""There are {len_x} **elements** of both `the_x`, and `the_y`;

Those values are plotted on the diagram on the left""")

box_layout = Layout(display='flex',
                    flex_flow='row',
                    justify_content='space-around',
                    width='auto'
                   )

# 将两个widget组件放入Box
hbox1 = widgets.Box(children=[plot_output, mdout], layout=box_layout)
display(hbox1)

额外说明

  • 用Output包装matplotlib图表后,就能和其他ipywidgets组件兼容,实现Flex布局的并排效果
  • widgets.Markdown可以直接解析Markdown语法,无需手动转HTML,更简洁可靠
  • 原代码中Markdown字符串末尾缺少闭合的双引号和括号,已经在修改后的代码中修复

内容的提问来源于stack exchange,提问作者Spring

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:31:13