If you don’t know what is Manim, then the following link is yours.
Moving dot along the curve
This is the example of ValueTracker
and always_redraw
.
Graph stick to the axes
Now the graph is ON the axes. Use get_graph
.
Graph with axes in a stupid way
It looks like a graph on axes, but it is not related to the axes. It is a separate object.
Graph without axes
Grouping and moving together
VGroup
is for grouping objects. Then we can play some movements on the group.
Add a circle
The default position is at the center of a screen. A circle is just an example. There are lots of different shapes you may try.
Minimal
This is a minimal manim example. It just waits for one second (default value) on the black screen.
I don’t remember what I did from here.
from manimlib.imports import *class a20200509_10(Scene):
def construct(self):
fx = lambda x: x.get_value()**2
x_value = ValueTracker(0)
fx_value = ValueTracker(fx(x_value))x_tex = Integer(x_value.get_value()).add_updater(lambda v: v.set_value(x_value.get_value()))
dot = Dot(radious = x_value.get_value()).add_updater(lambda x: x.move_to(0.1*x_value.get_value()))
self.add(x_tex)
self.add(dot)
self.play(
x_value.set_value,30,
rate_func=linear,
run_time=10
)
self.wait()
a20200509_08.py
from manimlib.imports import *class a20200509_08(Scene):
def construct(self):str = r"""
C = {1 \over r} \sum^{n}_{j=0} {{n}\choose{j}} p^{j} (1-p)^{n-j}
\max [ u^{j} d^{n-j} S - K , 0 ]
"""
str = str.split()
f_1 = TexMobject(*str)
f_1.scale(0.7)
self.play(Write(f_1))
self.wait()str = r"""
= {1 \over r} \sum^{n}_{j=a} {{n}\choose{j}} p^{j} (1-p)^{n-j}
( u^{j} d^{n-j} S - K )
"""
str = str.split()
f_2 = TexMobject(*str)
f_2.scale(0.7)
self.play(ApplyMethod(f_1.shift, UP*1.2))
self.play(Write(f_2))
self.wait()str = r"""
= S {1 \over r} \sum^{n}_{j=a} {{n}\choose{j}} p^{j} (1-p)^{n-j} u^{j} d^{n-j}
- K {1 \over r} \sum^{n}_{j=a} {{n}\choose{j}} p^{j} (1-p)^{n-j}
"""
str = str.split()
f_3 = TexMobject(*str)
f_3.scale(0.7)
self.play(ApplyMethod(f_1.shift, UP*1.2), ApplyMethod(f_2.shift, UP*1.2))
self.play(Write(f_3))
self.wait()str = r"""
= S {1 \over r} \sum^{n}_{j=a} {{n}\choose{j}} [ p u ]^{j} [ (1-p) d ]^{n-j}
- K {1 \over r} \sum^{n}_{j=a} {{n}\choose{j}} p^{j} (1-p)^{n-j}
"""
str = str.split()
f_4 = TexMobject(*str)
f_4.scale(0.7)self.play(Write(f_4.shift(DOWN*1.2)))
self.wait()str = r"""
= S \sum^{n}_{j=a} {{n}\choose{j}}
\Big[ {p u \over r} \Big]^{j} \Big[ {(1-p) d \over r} \Big]^{n-j}
- K {1 \over r} \sum^{n}_{j=a} {{n}\choose{j}} p^{j} (1-p)^{n-j}
"""
str = str.split()
f_5 = TexMobject(*str)
f_5.scale(0.7)self.play(Write(f_5.shift(DOWN*2.4)))
self.wait()
a20200507_10.py
from manimlib.imports import *class a20200507_10(GraphScene):
CONFIG = {
"y_max" : 1,
"x_max" : 1,
"axes_color" : BLUE,
}def construct(self):self.setup_axes(animate=True)g = lambda x : 4 * x * (1-x)graph = self.get_graph(
g,
color = GREEN
)self.play(
ShowCreation(graph),
)
self.wait(1)h = lambda x : xgraph = self.get_graph(
h,
color = RED
)self.play(
ShowCreation(graph),
)
self.wait(1)pt = Dot()
# pt.move_to(self.coords_to_point(0.5, 0.3))
# self.play(
# ShowCreation(pt),
# )# #pt.move_to(self.coords_to_point(0.5, 0.5))
# self.play(
# ApplyMethod(pt.move_to, self.coords_to_point(0.5, 0.5) )
# )x = [0.1, 0.2, ]
x = 0.3
for i in range(30):
self.play(ApplyMethod(pt.move_to, self.coords_to_point(x, g(x))))
self.play(ApplyMethod(pt.move_to, self.coords_to_point(g(x,), g(x))))
x = g(x)self.graph_origin = RIGHT*2 + UP*2
self.setup_axes(animate=True)g = lambda x : 4 * x * (1-x)graph = self.get_graph(
g,
color = GREEN
)self.play(
ShowCreation(graph),
)
self.wait(1)x = [0.1, 0.2, ]
x = 0.3
for i in range(30):
self.play(ApplyMethod(pt.move_to, self.coords_to_point(x, g(x))))
self.play(ApplyMethod(pt.move_to, self.coords_to_point(g(x,), g(x))))
x = g(x)
a20200509_12.py
from manimlib.imports import *
from scipy.stats import binomclass a20200509_12(GraphScene):
CONFIG = {
"y_min" : 0,
"y_max" : 0.3,
"x_min" : 0,
"x_max" : 31,
"y_axis_label": "$\\mathbb{P} (X=x)$",
}def construct(self):
self.setup_axes(animate=True,)N = 10
p = 0.6v_1 = self.plot_things(4,p)
self.add(v_1)
for N in range(5,31):
v = self.plot_things(N, p)
self.play(Transform(v_1, v))self.add(v_1)
self.wait()def plot_things(self, N, p):string = "N = {}, p = {}".format(N,p)
string = string.split()
f_1 = TexMobject(*string)
f_1.move_to(UP*3+RIGHT)things = VGroup()for i in range(N+1):
thing = Dot()
thing.move_to(self.coords_to_point(i, binom.pmf(i, n=N, p=p)))
things.add(thing)
return VGroup(f_1, things)
a20200510_05.py
2.5 is related to graph orientation.
from manimlib.imports import *
from scipy.stats import binomclass a20200510_05(GraphScene):
CONFIG = {
"y_min" : 0,
"y_max" : 0.3,
"x_min" : 0,
"x_max" : 31,
"y_axis_label": "$\\mathbb{P} (X=x)$",
}def construct(self):
self.setup_axes(animate=True,)N = 10
p = 0.2v_1 = self.plot_things(4,p)
self.add(v_1)
for N in range(5,31):
v = self.plot_things(N, p)
self.play(Transform(v_1, v))self.add(v_1)
self.wait()def plot_things(self, N, p):string = "N = {}, p = {}".format(N,p)
string = string.split()
f_1 = TexMobject(*string)
f_1.move_to(UP*3+RIGHT)things = VGroup()for i in range(N+1):
thing = Dot()
line = Line(start=[0,0.01,0], end=[0,0,0])
line.set_length(self.coords_to_point(i, binom.pmf(i, n=N, p=p))[1] + 2.5)
thing.move_to(self.coords_to_point(i, binom.pmf(i, n=N, p=p)))
line.move_to(self.coords_to_point(i, binom.pmf(i, n=N, p=p)/2))
things.add(thing, line)
return VGroup(f_1, things)
Next