TikZ 入门教程:基础绘图

引言

TikZ 是 LaTeX 中最强大的绘图宏包之一,全称 "TikZ ist kein Zeichenprogramm"(TikZ 不是绘图程序)——名字本身就是一个递归式的玩笑。借助 TikZ,你可以在 LaTeX 文档中直接用代码绘制几何图形、流程图、函数图像、示意图等,生成的图形与文档融为一体,质量专业。


一、准备工作

1.1 安装 LaTeX 环境

TikZ 是 LaTeX 的宏包,需要先安装 LaTeX 发行版:

  • Windows:推荐 MiKTeXTeX Live
  • macOS:推荐 MacTeX
  • Linux:通过包管理器安装 texlive-full

如果不想安装本地环境,直接使用 Overleaf 在线编辑器即可,注册账号后粘贴代码就能编译。

1.2 一个最简单的 TikZ 文档

\documentclass{article}
\usepackage{tikz}   % 引入 TikZ 宏包

\begin{document}

\begin{tikzpicture}
  % 在这里写绘图命令
  \draw (0,0) -- (2,0);  % 画一条线段
\end{tikzpicture}

\end{document}

关键点:

  • \usepackage{tikz} 放在导言区,引入宏包。
  • 所有绘图命令写在 \begin{tikzpicture} ... \end{tikzpicture} 环境内。
  • 每条绘图命令以分号 ; 结尾。
  • % 是注释符号。

二、坐标系基础

TikZ 使用直角坐标系,默认单位是 厘米(cm)

y
↑
|
|
+--------→ x
(0,0)

坐标的写法:

写法 含义
(1,2) x=1cm,y=2cm 的点
(1cm,2cm) 与上面等价,显式写单位
(30:2) 极坐标,角度 30°,半径 2cm
+(1,0) 相对上一个点,偏移 (1,0)
++(1,0) 相对上一个点偏移,并更新当前点

相对坐标示例

\begin{tikzpicture}
  % 从 (0,0) 出发,依次连接各点
  \draw (0,0) -- ++(2,0) -- ++(0,1) -- ++(-2,0) -- cycle;
  % cycle 表示回到起点,形成封闭图形
\end{tikzpicture}

上面的代码绘制了一个宽 2cm、高 1cm 的矩形。


三、基本绘图命令

3.1 直线与折线

\draw 是最基础的绘图命令,用 -- 连接多个坐标点。

\begin{tikzpicture}
  % 一条直线
  \draw (0,0) -- (3,0);

  % 折线(多段连接)
  \draw (0,1) -- (1,2) -- (2,1) -- (3,2);

  % 封闭折线(加 cycle)
  \draw (0,3) -- (1,4) -- (2,3) -- cycle;
\end{tikzpicture}

3.2 矩形

使用 rectangle 关键字,指定对角两点:

\begin{tikzpicture}
  % rectangle 后面跟对角点坐标
  \draw (0,0) rectangle (3,2);

  % 再画一个小矩形
  \draw (1,0.5) rectangle (2,1.5);
\end{tikzpicture}

3.3 圆形与椭圆

\begin{tikzpicture}
  % 圆:circle 后面跟半径
  \draw (1,1) circle (1);

  % 椭圆:ellipse {水平半轴 and 垂直半轴}
  \draw (4,1) ellipse (1.5 and 0.8);
\end{tikzpicture}

3.4 弧线

arc 命令格式:arc (起始角:终止角:半径)

\begin{tikzpicture}
  % 从 (2,0) 开始,画一段弧(圆心在 (0,0) 方向)
  \draw (2,0) arc (0:90:2);
  % 解释:从角度 0° 画到 90°,半径 2cm

  % 画半圆
  \draw (3,0) arc (0:180:1.5);
\end{tikzpicture}

3.5 曲线(贝塞尔曲线)

TikZ 支持三次贝塞尔曲线,用 ..controls 指定控制点:

\begin{tikzpicture}
  % 二次贝塞尔(一个控制点)
  \draw (0,0) .. controls (1,2) .. (3,0);

  % 三次贝塞尔(两个控制点)
  \draw (0,2) .. controls (1,4) and (2,0) .. (3,2);
\end{tikzpicture}

3.6 栅格(grid)

\begin{tikzpicture}
  % 画一个 4×3 的网格
  \draw[step=1, gray, thin] (0,0) grid (4,3);

  % 坐标轴
  \draw[->] (0,0) -- (4.5,0) node[right] {$x$};
  \draw[->] (0,0) -- (0,3.5) node[above] {$y$};
\end{tikzpicture}

node[right] {$x$} 表示在终点右侧放一个标签,内容是数学模式的 $x$。-> 表示带箭头。


四、线条样式

4.1 线宽

关键字 线宽
ultra thin 0.1pt
very thin 0.2pt
thin 0.4pt(默认)
semithick 0.6pt
thick 0.8pt
very thick 1.2pt
ultra thick 1.6pt
line width=2pt 自定义宽度
\begin{tikzpicture}
  \draw[ultra thin]  (0,5) -- (5,5) node[right] {ultra thin};
  \draw[thin]        (0,4) -- (5,4) node[right] {thin};
  \draw[thick]       (0,3) -- (5,3) node[right] {thick};
  \draw[very thick]  (0,2) -- (5,2) node[right] {very thick};
  \draw[ultra thick] (0,1) -- (5,1) node[right] {ultra thick};
  \draw[line width=3pt] (0,0) -- (5,0) node[right] {line width=3pt};
\end{tikzpicture}

4.2 线型

\begin{tikzpicture}
  \draw[solid]        (0,4) -- (5,4) node[right] {solid(实线)};
  \draw[dashed]       (0,3) -- (5,3) node[right] {dashed(虚线)};
  \draw[dotted]       (0,2) -- (5,2) node[right] {dotted(点线)};
  \draw[dash dot]     (0,1) -- (5,1) node[right] {dash dot};
  \draw[dash dot dot] (0,0) -- (5,0) node[right] {dash dot dot};
\end{tikzpicture}

4.3 箭头

\begin{tikzpicture}
  \draw[->]  (0,3) -- (3,3) node[right] {单箭头 ->};
  \draw[<-]  (0,2) -- (3,2) node[right] {反向 <-};
  \draw[<->] (0,1) -- (3,1) node[right] {双箭头 <->};
  \draw[|->] (0,0) -- (3,0) node[right] {竖线箭头 |->};
\end{tikzpicture}

五、颜色

5.1 内置颜色

TikZ 内置了常用颜色:black, white, red, green, blue, cyan, magenta, yellow, orange, violet, purple, brown, gray, darkgray, lightgray, lime, olive, pink, teal.

\begin{tikzpicture}
  \draw[red]    (0,2) -- (3,2);
  \draw[blue]   (0,1) -- (3,1);
  \draw[green]  (0,0) -- (3,0);
\end{tikzpicture}

5.2 颜色混合与透明度

\begin{tikzpicture}
  % 颜色混合:red!50 表示 50% 红色(与白色混合)
  \draw[red!50, ultra thick]  (0,2) -- (3,2);

  % red!70!blue 表示 70% 红色 + 30% 蓝色
  \draw[red!70!blue, ultra thick] (0,1) -- (3,1);

  % opacity 设置透明度
  \draw[blue, ultra thick, opacity=0.4] (0,0) -- (3,0);
\end{tikzpicture}

5.3 自定义颜色

\usepackage{xcolor}  % 在导言区引入

% 在 tikzpicture 外定义颜色
\definecolor{myblue}{RGB}{70, 130, 180}
\definecolor{mygray}{HTML}{AAAAAA}

\begin{tikzpicture}
  \draw[myblue, thick]  (0,1) -- (3,1);
  \draw[mygray, thick]  (0,0) -- (3,0);
\end{tikzpicture}

六、填充

6.1 \fill 命令

\fill 用于填充封闭区域,\filldraw 同时填充并描边:

\begin{tikzpicture}
  % 只填充,无边框
  \fill[blue!30] (0,0) rectangle (2,1);

  % 填充 + 描边
  \filldraw[fill=yellow, draw=orange, thick]
    (3,0) rectangle (5,1);

  % 填充圆形
  \fill[red!50] (1,2.5) circle (0.7);

  % 填充多边形
  \fill[green!40]
    (3,1.5) -- (4,3) -- (5,1.5) -- cycle;
\end{tikzpicture}

6.2 渐变填充(Shading)

需要引入 \usetikzlibrary{shadings}

\usetikzlibrary{shadings}  % 在导言区

\begin{tikzpicture}
  % 从左到右的颜色渐变
  \shade[left color=blue, right color=red]
    (0,0) rectangle (4,1.5);

  % 从内到外的径向渐变
  \shade[inner color=yellow, outer color=orange]
    (2,3) circle (1.2);
\end{tikzpicture}

七、综合示例:绘制一个简单的房屋

把前面学到的命令组合起来,画一个简单的示意房屋:

\begin{tikzpicture}[thick]
  % 房屋主体(矩形)
  \filldraw[fill=brown!20, draw=brown!70]
    (0,0) rectangle (4,3);

  % 屋顶(三角形)
  \filldraw[fill=red!60, draw=red!80]
    (-0.3,3) -- (2,5) -- (4.3,3) -- cycle;

  % 门(矩形)
  \filldraw[fill=brown!60, draw=black]
    (1.5,0) rectangle (2.5,1.8);

  % 门把手(小圆)
  \fill[yellow!80] (2.3,0.9) circle (0.08);

  % 左窗户
  \filldraw[fill=cyan!30, draw=black]
    (0.3,1.5) rectangle (1.2,2.5);
  \draw (0.75,1.5) -- (0.75,2.5);  % 竖分割线
  \draw (0.3,2.0)  -- (1.2,2.0);  % 横分割线

  % 右窗户
  \filldraw[fill=cyan!30, draw=black]
    (2.8,1.5) rectangle (3.7,2.5);
  \draw (3.25,1.5) -- (3.25,2.5);
  \draw (2.8,2.0)  -- (3.7,2.0);

  % 地面
  \draw[green!60!black, ultra thick] (-0.5,0) -- (4.5,0);

  % 太阳(弧形)
  \filldraw[fill=yellow, draw=orange]
    (5.5,4.5) circle (0.6);
  % 光线
  \foreach \angle in {0,45,...,315}
    \draw[orange] (5.5,4.5) ++(\angle:0.7) -- ++(\angle:0.4);
\end{tikzpicture}

posted @ 2026-06-05 10:54  江鸟Dev  阅读(8)  评论(0)    收藏  举报