zoukankan      html  css  js  c++  java
  • TIKZ——LaTeX基本绘图

      TIKZ是LaTeX的一个绘图包,可以绘制其他软件很难画出来的图像。

    基本用法

    直线、垂足、矩形、椭圆

      代码:

    documentclass{article}
    usepackage{tikz}  
    usetikzlibrary{arrows.meta}%画箭头用的包
    egin{document} 
    
    egin{tikzpicture}
         
        draw[->] (0,0)--(7,0);
        draw[->] (0,0)--(0,7); %箭头线
    
        draw[red] (2,1) -| (1,2);%直角1
        draw[blue] (2,1)|-(1,2);%直角2
        draw[green] (2,2) circle (1);%圆:圆心、半径
        draw[black] (4,4) ellipse (1 and 3);%椭圆:短、长半轴
        draw[yellow] (3,3) rectangle (4,1);%矩形
        draw[orange] (0,0) -- (2,1-|1,2);%找到垂点并与(0,0)连线
        draw[purple] (0,1)--(1,1.5)--(0,2)--cycle  %封闭的线段
                      (0,2)--(1,3);%不加分号的连写
    end{tikzpicture} 
     
    end{document}  

      效果图:

    圆弧、椭圆弧、三角函数曲线、贝塞尔曲线

      代码:

    documentclass{article}
    usepackage{tikz}  
    usetikzlibrary{arrows.meta}%画箭头用的包
    egin{document} 
     
    egin{tikzpicture}
        draw[->] (0,0)--(7,0);
        draw[->] (0,0)--(0,7); %箭头线
    
        draw[red] (3,2) arc (0:120:1);%圆弧:起始点,开始角度:结束角度:半径
        draw[blue] (3,2) arc (0:120:1 and 2);%椭圆弧
        draw[green] (0,0) sin (3,1) cos (5,0);%画pi/2的正弦、余弦
        draw[orange] (3,3)..controls (4,4)and(5,5) .. (4,3); %贝塞尔曲线:起点..controls 控制点 and 控制点..终点
    end{tikzpicture}  
    end{document}  

      效果图:

    辅助线、网格、填充、自定义函数

      代码:

    documentclass{article}
    usepackage{tikz}  
    usetikzlibrary{arrows.meta}%画箭头用的包
    egin{document} 
      
    egin{tikzpicture}
        draw[help lines,step = 0.5] (-3,-3) grid (3,3); %辅助线格子
        draw[-latex] (-4,0) -- (4,0);
        draw[-latex] (0,-4) -- (0,4);%实心箭头
        draw[domain = -2:360][samples = 200] plot({cos(x)}, {0.5*sin(x)});%函数图像,参数方程,内有小括号,外面必须用花括号括起来,samples是画函数图时列出的点
        filldraw[fill = yellow,draw = blue][ultra thick] (2,2) circle (1);%填色,还可以设置线宽
    end{tikzpicture} 
    end{document}  

      效果图:

    图形旋转、平移、缩放、变形、圆角多边形、箭头设置

      代码:

    documentclass{article}
    usepackage{tikz}  
    usetikzlibrary{arrows.meta}%画箭头用的包
    egin{document} 
       
    egin{tikzpicture}[>=Stealth]%设置箭头,环境中所有箭头都用这个库 
        draw[->] (-4,0) -- (4,0);
        draw[->>] (0,-4) -- (0,4); 
        draw(-3,2)--(-3,3)[rounded corners = 0.3cm] 
        -- (-2,3)--(-1.5,2)[sharp corners]--(-2.5,1)--cycle;%圆角多边形
     
        draw[help lines](0,0) rectangle (1,1);%辅助线
        draw[scale=1.5] (0,0) rectangle (1,1);%缩放
        draw[rotate=30] (0,0) rectangle (1,1);%扰起点旋转
    
        draw[help lines](2,0) rectangle (3,1);
        draw[shift={(0.5,0.5)}](2,0) rectangle (3,1);%平移
    
        draw[help lines](4,0) rectangle (5,1);
        draw[xslant=0.4](4,0) rectangle (5,1);%倾斜
    
    end{tikzpicture}
    
    end{document}  

      效果图:

    锚点、自定义属性

      代码:

    documentclass{article}
    usepackage{tikz}  
    usetikzlibrary{arrows.meta}%画箭头用的包
    egin{document} 
       
    egin{tikzpicture} 
        draw[->] (-4,0) -- (4,0);
        draw[->>] (0,-4) -- (0,4);  
    
        
    ode (A) at (2,2) {$A_1$};
        
    ode[draw] (B) at (3,2) {B};%draw属性添加自适应大小的方框
        
    ode[draw] (C) at (2.5,3) {};
        draw (A) -- (B.center) -- (C.north) -- (A);%连线可以连到字母方框的某个位置:center/north/south/east/west
        
    ode[draw,anchor=east] (a) at (A) {$a_0$};%定义A的锚点在A位置的东部,然后定义a,并将其位置定义为A位置的中心
        
    ode[draw,below right=4pt] (b) at (B) {b};%在相对于B的位置右下方4pt的地方定义b
    
        
    ode[circle,fill=blue,text=white,font={fseries}] 
            (A) at (0,0) {A node};%填充、各种可自定义的参数
        
    ode[rectangle,rounded corners,draw=gray,font={sffamilyslshape}] 
            (B) at (2,0) {B node};
    
        
    ode[draw] (P) at (-3,3){center};
        draw[dotted] (0,0)--(P.south);%画某点到某点的南边的线
    end{tikzpicture}
    
    end{document}  

      效果图:

     线段与点的标注

       代码:

    documentclass{article}
    usepackage{tikz}  
    usetikzlibrary{arrows.meta}%画箭头用的包
    egin{document} 
       
    egin{tikzpicture} 
        draw (2,1.5)coordinate (A)node[above] {$A$}%定义点A并标注A
            --node[above left,sloped] {$c$}%给线标注c
              (0,0)coordinate (B)node[left] {$B$}
            --node[below]{$a$}
              (2.5,0)coordinate (C)node[right]{$C$}
            --node[right]{$b$}
              cycle;
    end{tikzpicture}
    
    end{document}  

      效果图:

    例子

       代码:

    documentclass{article}
    usepackage{tikz}  
    usetikzlibrary{arrows.meta}%画箭头用的包
    egin{document} 
       
    egin{tikzpicture}[>=Stealth]
        draw[->,line width=0.2pt](-0.5,0)--(4.5,0);
        draw[->,line width=0.2pt](0,-0.5)--(0,2.5);
        coordinate (a) at (0.5,1.9);
        coordinate (b) at (4,1.2);
        coordinate (a0) at (a |- 0,0); 
        coordinate (b0) at (b |- 0,0); 
        
    ode[below] at (a0) {$a$};
        
    ode[below] at (b0) {$b$};
        filldraw[fill=gray!50,draw,thick] 
            (a0)--(a)..controls(1,2.8)and(2.7,0.4)..(b)--(b0)--cycle;
        
    ode[above right,outer sep=0.2cm,rounded corners,fill = green!20,draw = black,text = blue!60!red,scale = 0.6] %blue60,red40
            at (b) {$displaystyleint_a^bf(x)dx = F(b)-F(a)$};%写标注,draw边框,fill填充,scale字体大小
    end{tikzpicture}
    
    end{document}  

      效果图:

    用循环、判断语句绘图

       代码:

    documentclass{article}
    usepackage{tikz}
    usepackage{pgffor}%可以使用foreach的包
    usepackage{ifthen}%可以使用ifthenelse的包,还能使用whiledo
    
    egin{document}
    egin{tikzpicture}
        foreach i in {0,...,5}{
            foreach j in {0,...,i}{
                ifthenelse{i > 3}{%if成立
                    
    ode[fill = green!20,rounded corners]at (i,j) {(i,j)};
                }{%if不成立
                    
    ode[fill = red!20,rounded corners]at (i,j) {(i,j)};
                }
            }
        } 
    end{tikzpicture}
    end{document}

      效果图:

    定义变量、使用函数

      这个库可以让你使用过程语言结合LaTeX的画图脚本的来画图,十分方便。主要就是导入math库:

      usetikzlibrary{math}%使用数学程序
      usetikzlibrary{fpu}%修理不能使用ifthenelse的错误

      代码:

    documentclass{article}
    usepackage{tikz}
    usetikzlibrary{fpu}%修理不能使用ifthenelse的错误!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    usetikzlibrary{math}%使用数学程序
    egin{document}
    egin{tikzpicture} 
        	ikzmath{ %数学程序编写,定义的变量可以在其外部使用,里面所有语句都要加分号; 并且不能有多余的回车
            function paint_loop(x,y){ %函数中只能使用局部变量,外部变量不能用
                for i in {0,1,...,x}{
                    for j in {0,...,y}{ 
                        int ii,jj; 
                        ii = i*1.5; 
                        jj = j;  
                        if ii > 2 then {%条件分支语句    
                            {%绘图代码在数学程序内部使用,要用画括号括起来!!!!
                                
    ode[draw,fill = green!20,rounded corners] at (ii,jj) {(ii,jj)};
                            };
                        }else{ 
                            { 
                                
    ode[draw,fill = red!20,rounded corners] at (ii,jj) {(ii,jj)};
                            };
                        }; 
                    };
                }; 
            }; 
            a = 5; %和python一样,加个.就是实数,不加点就是小数
             = 3; 
            paint_loop(a,);
            coordinate co;%能自定义的变量有int、real、coordinate(坐标),不能在定义的时候赋值
            co = (3,4.5);
        }
        draw[-latex] (-1,0) -- (5,0);
        draw[-latex] (0,-1) -- (0,5);
        
    ode at (co) {COCOCO}; %在tikzmath中定义的变量在能外部使用
    
    end{tikzpicture}
    end{document}

      效果图:

    绘制神经网络图

      代码:

    documentclass{article}
    usepackage{tikz}
    usetikzlibrary{fpu}%修理不能使用ifthenelse的错误!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    usetikzlibrary{math}%使用数学程序
    egin{document}
    egin{tikzpicture} 
        	ikzmath{ 
            function paint_nodes(
    adius,gapy,posx,
    um){ 
                gapy = gapy+
    adius*2;  
                starty = gapy*(
    um-1)/2; 
                for i in {0,...,
    um-1}{
                    drawy = starty - i*gapy; 
                    {
                        filldraw[line width = 0.5pt,fill = white] (posx,drawy) circle (
    adius);
                    };
                };   
            };
            function paint_lines(
    adius,gapy,posx,
    um,
    extposx,
    extnum){ 
                gapy = gapy+
    adius*2;  
                starty = gapy*(
    um-1)/2;
                startyy = gapy*(
    extnum-1)/2; 
                for i in {0,...,
    um-1}{
                    drawy = starty - i*gapy; 
                    for j in {0,...,
    extnum-1}{  
                        drawyy = startyy - j*gapy;   
                        {
                            draw (posx,drawy) -- (
    extposx,drawyy);
                        };
                    }; 
                };
            };
            function paint_x_lines(
    adius,gapy,posx,
    um,ifright,len){
                gapy = gapy+
    adius*2;  
                starty = gapy*(
    um-1)/2; 
                for i in {0,...,
    um-1}{
                    drawy = starty - i*gapy; 
                    if ifright == 1 then{
                        {
                            draw[-latex] (posx,drawy) -- (posx+len,drawy);
                        }; 
                    }else{ 
                        {
                            draw[-latex] (posx,drawy)--(posx-len,drawy);
                        }; 
                    }; 
                }; 
            };
            function paint_net(x0,x1,x2,x3){  
                gapx = 2;
                
    adius = 0.3;
                gapy = 0.2; 
                paint_lines(
    adius,gapy,0*gapx,x0,1*gapx,x1);
                paint_lines(
    adius,gapy,1*gapx,x1,2*gapx,x2);
                paint_lines(
    adius,gapy,2*gapx,x2,3*gapx,x3); 
                paint_x_lines(
    adius,gapy,3*gapx,x3,1,1.8);
                paint_x_lines(
    adius,gapy,0*gapx-1,x0,1,1);
                paint_nodes(
    adius,gapy,1*gapx,x1); 
                paint_nodes(
    adius,gapy,2*gapx,x2);
                paint_nodes(
    adius,gapy,3*gapx,x3);  
            };  
            paint_net(7,9,10,5); 
        } 
        
    ode[scale = 0.9] at (0,-4.2) {Feature};
        
    ode[scale = 0.9] at (2,-4.2) {Input layer};
        
    ode[scale = 0.9] at (4,-4.2) {Hide layer};
        
    ode[scale = 0.9] at (6,-4.2) {Output layer}; 
    
    end{tikzpicture}
    end{document}

      效果图:

  • 相关阅读:
    HTML标签(2)
    HTML简介(1)
    JqueryUI input 自动提示 autocomplete
    Linux基础--单ubuntu 系统 u盘启动 install
    Spark Parquet file split
    HashMap与ConcurrentHashMap
    线程池阻塞队列之ArrayBlockingQueue
    线程池阻塞队列之LinkedBlockingQueue
    线程池的拒绝策略
    关闭线程池shutdown 和 shutdownNow 的区别
  • 原文地址:https://www.cnblogs.com/qizhou/p/13040159.html
Copyright © 2011-2022 走看看