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()
下次,请提供一个最小的例子。在这里我必须猜测你有问题的线路。幸运的是,这里只有一个
FadeOut
电话。更换
self.play(FadeOut(effectifs_text.scale(0.0005)))
与
self.play(FadeOut(numbers_text))
number_text
对象仍在屏幕上,在之前的行中使用 Transform
不会改变这一点。