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

Manim中无法对effectifs_text文本对象执行FadeOut淡出动画的问题

Manim中无法对effectifs_text文本对象执行FadeOut淡出动画的问题

嘿,我仔细看了你的代码,发现问题出在两个关键点上:

  • 你执行Transform(numbers_text.scale(0.5), effectifs_text.scale(0.5))的时候,effectifs_text其实从来没有被添加到场景中。Manim的Transform是把第一个参数(已经在舞台上的numbers_text)转换成第二个参数的形态,第二个参数只是作为模板,并不会被实际添加到场景。所以你之后试图对effectifs_text执行淡出,自然看不到效果——它根本不在舞台上。
  • 另外,scale()方法默认会返回一个新的对象,而不是修改原对象。effectifs_text.scale(0.0005)生成的是一个全新的VGroup,这个新对象同样不在场景里,所以淡出动画毫无作用。

最简单的修复方案

既然场景中实际显示的是变换后的numbers_text,直接对它执行淡出就可以了:

把原来的这行代码:

self.play(FadeOut(effectifs_text.scale(0.0005)))

改成:

self.play(FadeOut(numbers_text))

额外的小优化:修正Transform的写法

你原来的Transform写法有个小问题,numbers_text.scale(0.5)会创建一个新对象,可能导致后续对numbers_text的引用出现偏差。正确的写法应该是直接用原numbers_text作为被变换对象,目标对象用缩放后的版本:

比如步骤3里的Transform:

# 原写法
self.play(Transform(numbers_text.scale(0.5), sorted_numbers_text.scale(0.5)))
# 改成这样
self.play(Transform(numbers_text, sorted_numbers_text.scale(0.5)))

步骤6里的Transform同理:

# 原写法
self.play(Transform(numbers_text.scale(0.5), effectifs_text.scale(0.5)))
# 改成这样
self.play(Transform(numbers_text, effectifs_text.scale(0.5)))

这样修改后,numbers_text的引用会一直保持有效,后续的淡出动画也能正常工作。

测试修改后的代码片段

调整后步骤6到步骤7的代码应该是这样:

# Étape 6: Fusionner les nombres de chaque classe et les remplacer par leur effectif
class_counts = [0] * 8
for num in sorted_numbers:
    # Assure que class_index est dans les limites
    class_index = min((num - min_val) // class_width, 7)
    class_counts[class_index] += 1

effectifs_text = VGroup(
    *[Text(f"{count}").set_color(colors[i]) for i, count in enumerate(class_counts)])
effectifs_text.arrange(RIGHT, buff=1)
self.play(Transform(numbers_text, effectifs_text.scale(0.5)))
self.wait(2)
self.play(FadeOut(numbers_text))
print(type(effectifs_text))

# Étape 7: Construire un tableau d'effectifs pour chacune des classes de même amplitude
table_data = [["Taille (cm)", "Effectif"]]
for i, count in enumerate(class_counts):
    class_label = f"[{min_val + i *
                      class_width}, {min_val + (i + 1) * class_width} ["
    table_data.append([class_label, str(count)])

table = Table(
    table_data,
    include_outer_lines=True
)

# Colorier les cellules du tableau
for i, row in enumerate(table_data[1:], start=1):
    table.add_to_back(table.get_cell(
        (i, 0), color=colors[(i-1) % len(colors)]))
    table.add_to_back(table.get_cell(
        (i, 1), color=colors[(i-1) % len(colors)]))

self.play(FadeIn(table.scale(0.5)))
self.wait(2)
self.play(table.animate.shift(3*LEFT))

这样修改后,淡出动画应该就能正常触发了。

备注:内容来源于stack exchange,提问作者Jean-Pat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:59:33