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

为什么在Manim中绘制曲线下面积时会出现AttributeError报错?

报错原因

你遇到的AttributeError: 'NoneType' object has no attribute 'get_family'报错,核心原因是ax.get_area_under_graph方法返回了空值(None),你将空值传入self.add()方法时,Manim无法处理不存在的渲染对象,触发了属性报错。

问题触发的具体原因

你使用的原版manimlib中,get_area_under_graph方法对传入参数的格式、曲线定义域匹配要求比较严格,你的代码存在几处触发空值返回的问题:

  • 生成曲线时没有显式指定定义域,部分旧版本会默认生成极小区间的曲线,无法覆盖你要计算面积的[0,2]区间,导致面积对象生成失败
  • x_range参数传入了元组格式,部分旧版本manimlib只接受列表格式的区间参数
  • 重复添加curve对象到场景,多余的对象操作也可能引发异常
修正后的完整代码
from manimlib import *
import numpy as np

class GraphExample(Scene):
    def construct(self):
        ax = Axes((-3, 10), (-1, 8))
        ax.add_coordinate_labels()

        # 显式指定曲线的x轴范围,确保覆盖要计算面积的区间
        curve = ax.get_graph(lambda x: 2 * np.sin(x), x_range=[-3, 10])

        # x_range改用列表格式,补充样式参数确保返回有效对象
        area = ax.get_area_under_graph(
            graph=curve, 
            x_range=[0,2],
            fill_color=BLUE,
            fill_opacity=0.5
        )

        # 一次性添加所有对象,避免重复添加
        self.add(ax, curve, area)
        self.wait(1)
兼容替代方案

如果修正后仍有问题,可以改用兼容性更好的get_riemann_rectangles方法生成面积填充,替换get_area_under_graph调用部分即可:

area = ax.get_riemann_rectangles(
    graph=curve,
    x_range=[0,2],
    dx=0.01,
    fill_color=BLUE,
    fill_opacity=0.5,
    stroke_width=0
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:54:06