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)and5,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{cosx)}, {0.5*sinx)});%函数图像,参数方程,内有小括号,外面必须用花括号括起来,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)..controls1,2.8)and2.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^bfx)dx = Fb)-Fa)$};%写标注,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_loopx,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_loopa,);
        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_nodesadius,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_linesadius,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_linesadius,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_netx0,x1,x2,x3){  
            gapx = 2;
            adius = 0.3;
            gapy = 0.2; 
            paint_linesadius,gapy,0*gapx,x0,1*gapx,x1);
            paint_linesadius,gapy,1*gapx,x1,2*gapx,x2);
            paint_linesadius,gapy,2*gapx,x2,3*gapx,x3); 
            paint_x_linesadius,gapy,3*gapx,x3,1,1.8);
            paint_x_linesadius,gapy,0*gapx-1,x0,1,1);
            paint_nodesadius,gapy,1*gapx,x1); 
            paint_nodesadius,gapy,2*gapx,x2);
            paint_nodesadius,gapy,3*gapx,x3);  
        };  
        paint_net7,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}

  效果图:

Published by

风君子

独自遨游何稽首 揭天掀地慰生平