TikZ 入门教程:基础绘图
引言
TikZ 是 LaTeX 中最强大的绘图宏包之一,全称 "TikZ ist kein Zeichenprogramm"(TikZ 不是绘图程序)——名字本身就是一个递归式的玩笑。借助 TikZ,你可以在 LaTeX 文档中直接用代码绘制几何图形、流程图、函数图像、示意图等,生成的图形与文档融为一体,质量专业。
一、准备工作
1.1 安装 LaTeX 环境
TikZ 是 LaTeX 的宏包,需要先安装 LaTeX 发行版:
如果不想安装本地环境,直接使用 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}

本篇将从零开始讲解 TikZ 的环境配置、坐标系、基本图形的绘制方法,以及线条样式、颜色、填充等常用属性设置。
浙公网安备 33010602011771号