首页 > 其他分享 >用Manim标出在图形上的指定位置

用Manim标出在图形上的指定位置

时间:2024-08-05 13:25:18浏览次数:14  
标签:get 标签 point 标出 label ax 图形 dot Manim

用Manim标出在图形上的指定位置

        在数据可视化和数学演示中,将数据点与坐标系中的轴连接起来对于理解和分析数据的关系至关重要。通过绘制从坐标轴指向特定点的线,可以直观地展示数据点在二维空间中的位置。这种方法在多种场景下都具有重要意义,如函数图像的分析、几何图形的构造,以及在教育场合中帮助学生理解概念。

        使用 Manim 库中的 get_lines_to_point 方法,用户可以轻松地实现这种可视化。这一方法允许从坐标系的 x 轴和 y 轴向指定的点(通常以二维坐标表示)绘制线条。通过此方法,用户不仅能够指定目标点的坐标,还可以调整线条的颜色、粗细以及透明度等属性,以增强视觉效果。

        这种连接线的绘制可以帮助观众更好地理解数据的相关性。例如,在函数曲线的旁边绘制指向特定点的线,可以清晰地展示该点的 x 和 y 值,增强信息的传达。同时,这种可视化还可以用于图表的标注、数据的强调,或是演示复杂理论时的辅助工具,增强演示的直观性和吸引力。通过这种方式,数学和科学的概念变得更加生动,易于理解。

1.为传递的图形创建位置正确的标签,并带有一个可选的点

get_graph_label(graph, label='f(x)', x_val=None, direction=array([1., 0., 0.]),
 buff=0.25, color=None, dot=False, dot_config=None)

 get_graph_label 是一个用于在图形中标记函数的图例的函数。其参数含义如下:

  • graph: 需要标记的图形或函数对象,通常是你想要对其添加标签的图形。

  • label: 用于显示的标签字符串,默认为 'f(x)',可以修改为所需的任意字符串。

  • x_val: 可选参数,表示在 x 轴上的特定值。如果提供这个值,标签将会在该点处进行标记。

  • direction: 一个数组,指定标签的放置方向。默认值为 [1., 0., 0.],表示标签将沿着 x 轴的方向放置。

  • buff: 标签与 graph 之间的缓冲距离,默认为 0.25。这个参数可以用于调整标签与图形的间距。

  • color: 标签的颜色,可以是任何有效的颜色值(如字符串、RGB 值等)。如果为 None,则使用默认颜色。

  • dot: 一个布尔值,指示是否在标签旁添加一个小点。默认为 False

  • dot_config: 如果 dot 为 True,可以用此参数提供小点的配置(如颜色、大小等)。

这个函数通常用于数据可视化,帮助用户更易于识别和理解图形内容。

示例:
from manim import *
class GetGraphLabelExample(Scene):
    def construct(self):
        ax = Axes(
            x_range=[-PI, 3*PI,PI/2], 
            y_range=[-1, 3], 
            x_length=4*PI,
            y_length=4
        )
        """
        
         # 设置 x 轴标签和字体大小  
        a11=ax.x_axis.set_tick_labels([  
            MathTex(r"-\pi"),   
            MathTex(r"\frac{-\pi}{2}"),
            MathTex(r"0"),
            MathTex(r"\frac{\pi}{2}"),   
            MathTex(r"{\pi}"), 
            MathTex(r"\frac{3\pi}{2}"),
            MathTex(r"{2\pi}") ,
            MathTex(r"\frac{5\pi}{2}"),
            MathTex(r"{3\pi}")
        ])  
        
        # 不设置底部默认标签  
        ax.x_axis.label_font_size = 0.4 
        """
        
        sin = ax.plot(lambda x: np.sin(x), color=PURPLE_B)
        #.scale(0.95)
        
        
        label = ax.get_graph_label(
            graph=sin,
            label= MathTex(r"\frac{\pi}{2}"),
            x_val=PI / 2,
            dot=True,
            direction=UR,
        )


        self.add(ax,sin, label)

 运行结果:

示例2:

以下是一个使用 Manim 的示例程序,绘制函数 y=x^{2} 的图像,并在 x=2 的位置标记标签。

from manim import *  

class ParabolaLabelExample(Scene):  
    def construct(self):  
        # 创建坐标系  
        ax = Axes(  
            x_range=[-3, 3, 1],  # x轴范围  
            y_range=[-1, 10, 1],  # y轴范围  
            x_length=6,  # x轴长度  
            y_length=5,  # y轴长度  
        ).add_coordinates()  

        # 绘制 y = x^2 函数  
        parabola = ax.plot(lambda x: x**2, color=BLUE)  

        # 获取图形标签  
        label = ax.get_graph_label(  
            graph=parabola,  
            label=MathTex("y=x^2"),  # 标签内容  
            x_val=2,        # x = 2 位置  
            dot=True,       # 在标签位置绘制一个点  
            direction=UR,   # 标签方向  
        )  

        # 绘制 y = x^2 在 x = 2 处的点  
        point = Dot(ax.c2p(2, 4), color=YELLOW)  # 点 (2, 4)  

        # 添加坐标系、抛物线、标签和点到场景中  
        self.add(ax, parabola, label, point)  

 在这个代码中:

  • 创建了一个坐标系。
  • 绘制了函数 y=x^{2}
  • 在 x=2处获取了标签,并在该点绘制了一个点。

运行结果:

 2.成水平线

get_horizontal_line(point, **kwargs)

 get_horizontal_line(point, **kwargs) 是 Manim 中用于生成水平线的函数。具体来说,它绘制一条通过给定点的水平线。以下是对这个函数的详细解释:

参数
  1. point:

    • 这是一个 2D 坐标(通常使用 c2p(x, y) 生成的),决定了水平线的起始位置。水平线会通过这个点水平延伸。
  2. kwargs:

    • 这表示函数接受的其他可选参数。kwargs 通常用于传递额外的属性,如颜色 (color)、线宽 (stroke_width)、透明度 (opacity)等。例如,你可以设置线的颜色为红色、透明度为0.5等。
返回值

该函数返回一个 Manim 中的 Line 对象,表示生成的水平线。

示例 :
from manim import *  

class HorizontalLineExample(Scene):  
    def construct(self):  
        # 创建坐标系  
        ax = Axes().add_coordinates()
            #ax = Axes(x_range=[-3, 3, 1], y_range=[-2, 2, 1])  
        
        # 绘制水平线,通过(1, 1)点  
        p01=ax.c2p(1, 1)
        horizontal_line = ax.get_horizontal_line(p01, color=RED) 
        d01=Dot(p01)
    
        point = ax.c2p(-4, 1.5)

        dot = Dot(point)
        line = ax.get_horizontal_line(point, line_func=Line)

        self.add(ax, horizontal_line, d01,line, dot)

运行结果:

 3.综合实现——坐标系的轴向给定的点绘制线

get_lines_to_point 是 Manim 中 Axes 类的一个方法,用于从坐标系的轴向给定的点绘制线。

函数原型
get_lines_to_point(point, **kwargs) 
参数
  1. point:

    • 类型: np.ndarraytuplelist
    • 描述: 这个参数表示目标点的坐标,你想从坐标轴绘制线到这个点。通常这个点是以二维坐标的形式传递,例如 [x, y]
  2. kwargs (可选参数):

    • 这个参数允许你传递额外的关键字参数,以自定义绘制的线条。这些关键字参数通常是 Matplotlib 画线方法的参数,包括:
      • color: 线的颜色。
      • stroke_width: 线的宽度。
      • opacity: 线的透明度等属性。
返回值
  • 返回值通常是一个包含线对象的列表,这些线对象是从坐标轴(例如 x 轴和 y 轴)延伸到指定点的。
示例:
from manim import *  

class GetLinesToPointExample(Scene):  
    
    def construct(self):  
        # 创建坐标系,指定范围  
        ax = Axes(  
            x_range=[-3, 3, 1],  # x轴范围  
            y_range=[-1, 10, 1],  # y轴范围  
            x_length=6,  # x轴长度  
            y_length=5,  # y轴长度  
        )
        ax.add_coordinates()     
        # 创建点  
        dot = Dot(ax.c2p(2, 4), color=YELLOW)  

        # 获取从坐标系到点的线  
        lines_1 = ax.get_lines_to_point(dot.get_center(), stroke_width=10 , color=GREEN) 
        
        parabola = ax.plot(lambda x: x**2, color=BLUE)  

        # 获取图形标签  
        label = ax.get_graph_label(  
            graph=parabola,  
            label=MathTex(r"\begin{matrix}x=2\\ y=4\end{matrix}"),  # 标签内容  
            x_val=2,        # x = 2 位置  
            color=RED,
            dot=True,       # 在标签位置绘制一个点  
            direction=RIGHT,   # 标签方向  
        )  

        # 添加坐标系、点和线到场景  
        self.add(ax,label,parabola, dot, lines_1)  

运行结果: 

标签:get,标签,point,标出,label,ax,图形,dot,Manim
From: https://blog.csdn.net/qq_45449625/article/details/140923345

相关文章

  • 用Manim在图形和坐标轴上画线条
     用Manim在图形和坐标轴上画线条.画图像函数的切线angle_of_tangent(x,graph,dx=1e-08)angle_of_tangent(x,graph,dx=1e-08)是Manim中用于计算图形在给定点的切线角度的函数。以下是对该函数参数的解释:参数说明x:这是你想要计算切线角度的x坐标。在这个坐标处,......
  • 用Manim实现——计算和绘制图形下方区域
    用Manim实现——计算和绘制图形下方区域get_area 函数    get_area是一个用于计算和绘制图形下方区域的函数,常用于图形动画库(如Manim)get_area(graph,x_range=None,color=(ManimColor('#58C4DD'),ManimColor('#83C167')),opacity=0.3,bounded_graph=None,**kwar......
  • Manim系列——创建并使用坐标系统
    到目前为止,我们一直在研究表单的功能具有一个自变量和一个因变量。这些函数可以在二维空间中表示,使用两个数值轴,使我们能够用两个数字识别平面中的每个点。我们现在想谈谈三维空间;为了识别三维空间中的每个点,我们需要三个数值。建立这种关联的明显方法是添加一个新轴,垂直于和......
  • 用Python打造精彩动画与视频, 6.2 使用Manim进行数学和科学可视化
     6.2使用Manim进行数学和科学可视化Manim(MathematicalAnimationEngine)是一款强大的动画制作工具,尤其适用于数学和科学领域的可视化。它由3Blue1Brown的GrantSanderson开发,旨在通过动画演示复杂的数学概念,使其更易于理解。使用Manim,用户可以创建高质量的数学动画,从简单的......
  • 用Python打造精彩动画与视频,5.3 使用Manim创建简单动画
     5.3使用Manim创建简单动画在这一节中,我们将介绍如何使用Manim创建简单的动画。我们将从基本的场景构建开始,然后演示如何添加动画效果。通过这些示例,你将能够掌握使用Manim创建各种动画的基本技能。5.3.1创建一个简单的场景Manim中的基本单元是场景(Scene)。每个场景都是一......
  • 用Python打造精彩动画与视频, 5.2 安装和设置Manim
     5.2安装和设置ManimManim是一个强大的动画库,用于创建高质量的数学动画。它最初由3Blue1Brown的GrantSanderson开发,并被广泛用于教育和展示。以下是安装和设置Manim的详细步骤。5.2.1安装ManimManim需要Python环境和一些依赖库。在安装Manim之前,请确保已经......
  • 前端必知必会-HTMLCanvas图形
    文章目录HTMLCanvas图形添加JavaScript绘制一条线绘制一个圆圈绘制一个文本描边文本绘制线性渐变绘制圆形渐变绘制图像总结HTMLCanvas图形HTML<canvas>元素用于在网页上绘制图形。什么是HTMLCanvas?HTML<canvas>元素用于通过JavaScript动态绘制图形......
  • 打卡信奥刷题(494)用Scratch图形化工具信奥P1420[普及组/提高] 最长连号
    最长连号题目描述输入长度为nnn的一个正整数序列,要求输出序列中最长连号的长度。连号指在序列中,从小到大的连续自然数。输入格式第一行,一个整数......
  • m3u8下载工具N_m3u8DL-CLI的图形界面增强版
    摘自:https://zhuanlan.zhihu.com/p/672615148 简介(仅windows)N_m3u8DL-CLI是个非常方便的开源免费m3u8下载工具,自带一个叫SimpleGUI的简单图形界面。但是这个图形界面工具,太过简单,连任务列表都没有。所以,这里二次开发,增加了任务列表功能。新增的所有功能,请在项目页面查看详......
  • Windows图形界面(GUI)-MFC-C/C++ - 静态文本框(Static Text) - CStatic
    公开视频-> 链接点击跳转公开课程博客首页-> ​​​链接点击跳转博客主页目录静态文本框(StaticText)-CStatic基本概念成员函数示例代码静态文本框(StaticText)-CStatic基本概念静态文本框是一种用于显示文本的控件,用户不能编辑其中的文本。静态文本框......