为什么在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
相关产品推荐
相关产品推荐

