Repository: ManimCommunity/manim
File: manim/mobject/coordinate_systems.py (Python)

Code before:
    color_gradient,
    invert_color,
)
from ..utils.config_ops import merge_dicts_recursively, update_dict_recursively
from ..utils.simple_functions import binary_search
from ..utils.space_ops import angle_of_vector

# TODO: There should be much more code reuse between Axes, NumberPlane and GraphScene


class CoordinateSystem:
    """
    Abstract class for Axes and NumberPlane

    Examples
    --------

    .. manim:: CoordSysExample
        :save_last_frame:

        class CoordSysExample(Scene):
            def construct(self):
                # When drawing Axes, the location of the ticks
                # on the axes depend on x_range and y_range.
                grid = Axes(
                    x_range=[0, 1, 0.05],  # The number of decimal places is determined by the step size.
                    y_range=[0, 1, 0.05],
                    x_length=9,
                    y_length=5.5,
                    x_axis_config={"numbers_to_include": np.arange(0, 1 + 0.1, 0.1), "number_scale_value": 0.5},
                    y_axis_config={"numbers_to_include": np.arange(0, 1 + 0.1, 0.1), "number_scale_value": 0.5},
                    tips=False,
                )

                graphs = VGroup()
                # Label for x-axis and y-axis.
                grid_labels = grid.get_axis_labels(x_label=Tex("$x$"), y_label=Tex("$y$"))
                # Shifting y-axis label to the left to make space for the title.
                grid_labels[1].shift(MED_LARGE_BUFF * LEFT)

                for n in np.arange(1, 20 + 0.5, 0.5):
                    graphs += grid.get_graph(lambda x: x ** (n), x_range=[0, 1], color=WHITE)
                    graphs += grid.get_graph(lambda x: x ** (1 / n), x_range=[0, 1], color=WHITE, use_smoothing=False)

                # Extra lines and labels for point (1,1)
                graphs += grid.get_horizontal_line(grid.c2p(1, 1, 0), color=BLUE)
                graphs += grid.get_vertical_line(grid.c2p(1, 1, 0), color=BLUE)
                graphs += Dot(point=grid.c2p(1, 1, 0), color=YELLOW)
                graphs += Text("(1,1)").scale(0.75).next_to(grid.c2p(1, 1, 0))

                title = Title("Graphs of $y=x^{\\frac{1}{n}}$ and $y=x^n (n=1,2,3,...,20)$", include_underline=False, scale_factor=0.85)

Review comment (suggestion):
`#The number of decimal places is determined by the step size.` -> `# step size determines num_decimal_places.`

Code after:
    color_gradient,
    invert_color,
)
from ..utils.config_ops import merge_dicts_recursively, update_dict_recursively
from ..utils.simple_functions import binary_search
from ..utils.space_ops import angle_of_vector

# TODO: There should be much more code reuse between Axes, NumberPlane and GraphScene


class CoordinateSystem:
    """
    Abstract class for Axes and NumberPlane

    Examples
    --------

    .. manim:: CoordSysExample
        :save_last_frame:

        class CoordSysExample(Scene):
            def construct(self):
                # the location of the ticks depends on the x_range and y_range.
                grid = Axes(
                    x_range=[0, 1, 0.05],  # step size determines num_decimal_places.
                    y_range=[0, 1, 0.05],
                    x_length=9,
                    y_length=5.5,
                    axis_config={
                        "numbers_to_include": np.arange(0, 1 + 0.1, 0.1),
                        "number_scale_value": 0.5,
                    },
                    tips=False,
                )

                # Labels for the x-axis and y-axis.
                y_label = grid.get_y_axis_label("y", edge=LEFT, direction=LEFT, buff=0.4)
                x_label = grid.get_x_axis_label("x")
                grid_labels = VGroup(x_label, y_label)

                graphs = VGroup()
                for n in np.arange(1, 20 + 0.5, 0.5):
                    graphs += grid.get_graph(lambda x: x ** n, color=WHITE)
                    graphs += grid.get_graph(
                        lambda x: x ** (1 / n), color=WHITE, use_smoothing=False
                    )

                # Extra lines and labels for point (1,1)
                graphs += grid.get_horizontal_line(grid.c2p(1, 1, 0), color=BLUE)
                graphs += grid.get_vertical_line(grid.c2p(1, 1, 0), color=BLUE)
                graphs += Dot(point=grid.c2p(1, 1, 0), color=YELLOW)