无法在 Manim 中淡出文本

问题描述 投票:0回答:1

FadeOut 方法因对象effectifs_text 失败,我尝试修改比例但没有成功。 有什么想法吗? 谢谢

from manim import *
import numpy as np


class NormalDistributionNumbers(Scene):
    def construct(self):
        # Étape 1: Générer une liste de 100 nombres suivant une loi normale N(175, 20), arrondis à l'unité
        random_numbers = np.random.normal(175, 15, 100).round().astype(int)

        # Étape 2: Afficher ces nombres
        numbers_text = VGroup(*[Text(f"{num}") for num in random_numbers])
        numbers_text.arrange_in_grid(rows=10, cols=10, buff=0.5)
        self.play(Write(numbers_text.scale(0.5)))
        self.wait(2)

        # Étape 3: Trier les nombres dans l'ordre croissant
        sorted_numbers = sorted(random_numbers)
        sorted_numbers_text = VGroup(
            *[Text(f"{num}") for num in sorted_numbers])
        sorted_numbers_text.arrange_in_grid(rows=10, cols=10, buff=0.5)
        self.play(Transform(numbers_text.scale(0.5),
                  sorted_numbers_text.scale(0.5)))
        self.wait(2)

        # Étape 4: Colorier les nombres inférieurs à 175 en rouge et ceux supérieurs ou égaux à 175 en bleu

        # Étape 5: Partitionner la série en 8 classes de même amplitude entière et labelliser les valeurs avec 8 couleurs
        min_val = min(sorted_numbers)
        max_val = max(sorted_numbers)
        amplitude = max_val - min_val
        # Assure que class_width est un entier
        class_width = (amplitude + 7) // 8

        colors = [PURE_RED, ORANGE, YELLOW,
                  PURE_GREEN, PURE_BLUE, PURPLE, PINK, TEAL]

        for num_text, num in zip(numbers_text, sorted_numbers):
            # Assure que class_index est dans les limites
            class_index = min((num - min_val) // class_width, 7)
            num_text.set_color(colors[class_index])

        self.wait(2)

        # É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.scale(
            0.5), effectifs_text.scale(0.5)))
        self.wait(2)
        self.play(FadeOut(effectifs_text.scale(0.0005)))
        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))


# Pour exécuter la scène
if __name__ == "__main__":
    from manim import config
    config.media_width = "75%"
    scene = NormalDistributionNumbers()
    scene.render()
python manim
1个回答
0
投票

下次,请提供一个最小的例子。在这里我必须猜测你有问题的线路。幸运的是,这里只有一个

FadeOut
电话。更换

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

self.play(FadeOut(numbers_text))

number_text
对象仍在屏幕上,在之前的行中使用
Transform
不会改变这一点。

© www.soinside.com 2019 - 2024. All rights reserved.