[Python] Fails to FadeOut a text in Manim

Discussão em 'Python' iniciado por Stack, Maio 20, 2025.

  1. Stack

    Stack Membro Participativo

    The methode FadeOut fails with the object effectifs_text, I tried to tinker with scale without success.

    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) 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()

    Continue reading...

Compartilhe esta Página