From bbf45f95c673aa1898256f6d5b9aeb8a6a21c3cb Mon Sep 17 00:00:00 2001 From: DangGiaChi Date: Thu, 16 Dec 2021 22:03:29 +0700 Subject: [PATCH 1/3] Add option to add ticks on x-axis in BarChart() --- manimlib/mobject/probability.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/manimlib/mobject/probability.py b/manimlib/mobject/probability.py index 69a71069..fb7a76b7 100644 --- a/manimlib/mobject/probability.py +++ b/manimlib/mobject/probability.py @@ -8,6 +8,7 @@ from manimlib.mobject.svg.tex_mobject import TexText from manimlib.mobject.types.vectorized_mobject import VGroup from manimlib.utils.color import color_gradient from manimlib.utils.iterables import listify +from numpy import ndarray EPSILON = 0.0001 @@ -149,7 +150,9 @@ class BarChart(VGroup): "height": 4, "width": 6, "n_ticks": 4, + "include_x_ticks": False, "tick_width": 0.2, + "tick_width_x": 0.15, "label_y_axis": True, "y_axis_label_height": 0.25, "max_value": 1, @@ -165,6 +168,7 @@ class BarChart(VGroup): if self.max_value is None: self.max_value = max(values) + self.n_ticks_x = len(values) self.add_axes() self.add_bars(values) self.center() @@ -182,6 +186,17 @@ class BarChart(VGroup): ticks.add(tick) y_axis.add(ticks) + if self.include_x_ticks == True: + ticks1 = VGroup() + widths = np.linspace(0, self.width, self.n_ticks_x + 1) + label_values = np.linspace(0, len(self.bar_names), self.n_ticks_x + 1) + for x, value in zip(widths, label_values): + tick1 = Line(UP*0.05, DOWN*0.05) + tick1.set_width(self.tick_width_x) + tick1.move_to(x * RIGHT) + ticks.add(tick1) + x_axis.add(ticks1) + self.add(x_axis, y_axis) self.x_axis, self.y_axis = x_axis, y_axis @@ -196,7 +211,7 @@ class BarChart(VGroup): self.add(labels) def add_bars(self, values): - buff = float(self.width) / (2 * len(values) + 1) + buff = float(self.width) / (2 * len(values)) bars = VGroup() for i, value in enumerate(values): bar = Rectangle( @@ -205,7 +220,7 @@ class BarChart(VGroup): stroke_width=self.bar_stroke_width, fill_opacity=self.bar_fill_opacity, ) - bar.move_to((2 * i + 1) * buff * RIGHT, DOWN + LEFT) + bar.move_to((2 * i + 0.5) * buff * RIGHT, DOWN + LEFT * 5) bars.add(bar) bars.set_color_by_gradient(*self.bar_colors) From b489490f41840ca2e7f02cd23f1b532d221c5959 Mon Sep 17 00:00:00 2001 From: DangGiaChi Date: Fri, 17 Dec 2021 07:14:37 +0700 Subject: [PATCH 2/3] Fixed things as suggestions --- manimlib/mobject/probability.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/manimlib/mobject/probability.py b/manimlib/mobject/probability.py index fb7a76b7..a7512007 100644 --- a/manimlib/mobject/probability.py +++ b/manimlib/mobject/probability.py @@ -8,7 +8,6 @@ from manimlib.mobject.svg.tex_mobject import TexText from manimlib.mobject.types.vectorized_mobject import VGroup from manimlib.utils.color import color_gradient from manimlib.utils.iterables import listify -from numpy import ndarray EPSILON = 0.0001 @@ -152,7 +151,7 @@ class BarChart(VGroup): "n_ticks": 4, "include_x_ticks": False, "tick_width": 0.2, - "tick_width_x": 0.15, + "tick_height": 0.15, "label_y_axis": True, "y_axis_label_height": 0.25, "max_value": 1, @@ -187,15 +186,14 @@ class BarChart(VGroup): y_axis.add(ticks) if self.include_x_ticks == True: - ticks1 = VGroup() widths = np.linspace(0, self.width, self.n_ticks_x + 1) label_values = np.linspace(0, len(self.bar_names), self.n_ticks_x + 1) for x, value in zip(widths, label_values): - tick1 = Line(UP*0.05, DOWN*0.05) - tick1.set_width(self.tick_width_x) + tick1 = Line(UP, DOWN) + tick1.set_height(self.tick_height) tick1.move_to(x * RIGHT) - ticks.add(tick1) - x_axis.add(ticks1) + ticks.add(tick) + x_axis.add(ticks) self.add(x_axis, y_axis) self.x_axis, self.y_axis = x_axis, y_axis From 84fd657d9b2519162a9c54e78dade9324b338fa6 Mon Sep 17 00:00:00 2001 From: DangGiaChi Date: Fri, 17 Dec 2021 15:02:10 +0700 Subject: [PATCH 3/3] Change variables names: x_tick, x_ticks, y_tick, y_ticks --- manimlib/mobject/probability.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/manimlib/mobject/probability.py b/manimlib/mobject/probability.py index a7512007..dd3dfd31 100644 --- a/manimlib/mobject/probability.py +++ b/manimlib/mobject/probability.py @@ -175,35 +175,36 @@ class BarChart(VGroup): def add_axes(self): x_axis = Line(self.tick_width * LEFT / 2, self.width * RIGHT) y_axis = Line(MED_LARGE_BUFF * DOWN, self.height * UP) - ticks = VGroup() + y_ticks = VGroup() heights = np.linspace(0, self.height, self.n_ticks + 1) values = np.linspace(0, self.max_value, self.n_ticks + 1) for y, value in zip(heights, values): - tick = Line(LEFT, RIGHT) - tick.set_width(self.tick_width) - tick.move_to(y * UP) - ticks.add(tick) - y_axis.add(ticks) + y_tick = Line(LEFT, RIGHT) + y_tick.set_width(self.tick_width) + y_tick.move_to(y * UP) + y_ticks.add(y_tick) + y_axis.add(y_ticks) if self.include_x_ticks == True: + x_ticks = VGroup() widths = np.linspace(0, self.width, self.n_ticks_x + 1) label_values = np.linspace(0, len(self.bar_names), self.n_ticks_x + 1) for x, value in zip(widths, label_values): - tick1 = Line(UP, DOWN) - tick1.set_height(self.tick_height) - tick1.move_to(x * RIGHT) - ticks.add(tick) - x_axis.add(ticks) + x_tick = Line(UP, DOWN) + x_tick.set_height(self.tick_height) + x_tick.move_to(x * RIGHT) + x_ticks.add(x_tick) + x_axis.add(x_ticks) self.add(x_axis, y_axis) self.x_axis, self.y_axis = x_axis, y_axis if self.label_y_axis: labels = VGroup() - for tick, value in zip(ticks, values): + for y_tick, value in zip(y_ticks, values): label = Tex(str(np.round(value, 2))) label.set_height(self.y_axis_label_height) - label.next_to(tick, LEFT, SMALL_BUFF) + label.next_to(y_tick, LEFT, SMALL_BUFF) labels.add(label) self.y_axis_labels = labels self.add(labels)