使用 TikZ 绘制图形:基础知识
点击下方公众号,回复资料分享,收获惊喜
简介
TikZ 是在 LaTeX 中创建图形元素的最复杂和强大的工具。第一期介绍了:使用 TikZ 绘制图形:介绍和资料分享。本期通过一个简单的例子,介绍一些基本概念:绘制线条、点、曲线、圆、矩形等。
首先,在文档的导言部分加载 TikZ 包,方法是包含一行 \usepackage{tikz}
,然后使用 tikzpicture
环境绘制图形。
\documentclass{article}
\usepackage{tikz}
\usepackage{ctex} %解决中文显示问题
\begin{document}
\begin{tikzpicture}
\draw[gray, thick] (-1,2) -- (2,-1);
\draw[gray, thick] (-1,-1) -- (2,2);
\filldraw[black] (0.5,0.5) circle (2pt) node[anchor=west]{交点};
\end{tikzpicture}
\end{document}
得到以下结果:
添加线:\draw[gray, thick]
定义了一个图形元素,其颜色为灰色,线条粗细为 thick
。该线实际上由两个端点 (-1,2)
和 (2,-1)
定义,通过 --
连接这两个点。
添加点:\filldraw[black]
绘制圆并使用黑色填充。位置为 (0.5,0.5)
和半径 (2pt)
。点旁边是一个节点,包含文本 "交点" 的方框,并以点的西侧为锚点。
注意:每个绘制命令末尾使用的分号;
基础元素:点,线和路径
本节我们展示如何创建一些基本的图形元素,这些元素可以组合在一起创建更为复杂的图形。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (-2,0) -- (2,0);
\filldraw [red] (0,0) circle (2pt);
\draw (-2,-2) .. controls (0,0) .. (2,-2);
\draw (-2,2) .. controls (-1,0) and (1,0) .. (2,2);
\end{tikzpicture}
\end{document}
得到以下结果:
在这个例子中有三个基本命令:
\draw (-2,0) -- (2,0);
: 定义一条线段,其端点分别为(-2,0)
和(2,0)
。\filldraw [gray] (0,0) circle (2pt);
: 创建一个非常小的灰色圆,其圆心为(0,0)
,半径为(2pt)
。\filldraw
命令用于绘制元素并以特定颜色进行填充。有关更多示例,请参阅下一节。\draw (-2,2) .. controls (-1,0) and (1,0) .. (2,2);
: 绘制贝塞尔曲线。定义四个点:(-2,2)
和(2,2)
是它的端点,(-1,0)
和(1,0)
是控制点,决定了曲线的"曲度"。
基本几何形状:圆,椭圆和多边形
几何图形可以由更简单的元素构建,因此让我们从圆、椭圆和弧开始。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\filldraw[color=red!60, fill=red!5, very thick](-1,0) circle (1.5);
\fill[blue!50] (2.5,0) ellipse (1.5 and 0.5);
\draw[ultra thick, ->] (6.5,0) arc (0:220:1);
\end{tikzpicture}
\end{document}
可以得到以下结果:
在这个例子中有三个基本命令:
\filldraw[color=red!60, fill=red!5, very thick](-1,0) circle (1.5);
: 此命令在前面的部分用于绘制一个点,但在这个例子中,在方括号内有一些额外的参数。下面是这些参数的解释:
color=red!60
: 圆环的颜色设置为60%
的红色(比"纯"红色更浅)。请参阅参考指南以获取 LaTeX 中默认颜色的列表;此外,请参阅在 LaTeX 中使用颜色以了解如何创建自己的颜色。fill=red!5
: 填充圆为更浅的红色。very thick
: 此参数定义了线条的粗细。请参阅参考指南以获取完整的数值列表。
\fill[blue!50] (2.5,0) ellipse (1.5 and 0.5);
: 创建椭圆,提供中心点 (2.5,0)
和两个半径:水平和垂直分别为 (1.5
和 0.5
)。
\draw[ultra thick, ->] (6.5,0) arc (0:220:1);
: 绘制从点 (6.5,0)
开始的弧。额外的参数 ->
表示弧末端将有一个箭头。除了起点外,还必须提供三个额外的值:起始和结束角度,以及半径;在这里设置为 (0:220:1
) 。
除了曲线几何形状,您还可以创建使用直线的元素,使用类似的语法:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[blue, very thick] (0,0) rectangle (3,2);
\draw[orange, ultra thick] (4,0) -- (6,0) -- (5.7,2) -- cycle;
\end{tikzpicture}
\end{document}
\draw[blue, very thick] (0,0) rectangle (3,2);
: 矩形是通过特殊命令rectangle
创建的。需要提供两个点,第一个点是开始绘制矩形的地方,第二个点是对角线上的点。\draw[orange, ultra thick] (4,0) -- (6,0) -- (5.7,2) -- cycle;
: 要绘制多边形,需要绘制由直线组成的闭合路径:从(4,0)
到(6,0)
,以及从(6,0)
到(5.7,2)
的一条线。cycle
指令意味着起始点和结束点应该重合,从而创建一个“闭合”路径(形状),这导致构建最终的线段。
图表
在 TikZ 中,节点可能是最灵活的元素。我们在介绍中已经使用了一个节点——用于在图中添加一些文本。下一个例子使用节点创建一个图表。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
roundnode/.style={circle, draw=green!60, fill=green!5, very thick, minimum size=7mm},
squarednode/.style={rectangle, draw=red!60, fill=red!5, very thick, minimum size=5mm},
]
%Nodes
\node[squarednode] (maintopic) {2};
\node[roundnode] (uppercircle) [above=of maintopic] {1};
\node[squarednode] (rightsquare) [right=of maintopic] {3};
\node[roundnode] (lowercircle) [below=of maintopic] {4};
%Lines
\draw[->] (uppercircle.south) -- (maintopic.north);
\draw[->] (maintopic.east) -- (rightsquare.west);
\draw[->] (rightsquare.south) .. controls +(down:7mm) and +(right:7mm) .. (lowercircle.east);
\end{tikzpicture}
\end{document}
得到以下结果:
这个图中实际上有三个命令:节点定义,节点声明和连接两个节点的线。
roundnode/.style={circle, draw=green!60, fill=green!5, very thick, minimum size=7mm}
:作为参数传递给tikzpicture
环境。定义了一个节点,将被引用为roundnode
:这个节点将是一个圆,其外环将用绿色!60
绘制,并用绿色!5
填充。线条将非常粗,其最小大小为7mm
。下面的行定义了一个使用类似参数的名为squarednode
的第二个矩形形状的节点。\node[squarednode] (maintopic) {2};
:这将创建一个squarednode
,如前面的命令中定义的。此节点将具有maintopic
的 ID,并包含数字 2。如果在大括号内留空,将不显示文本。[above=of maintopic]
:请注意,除了第一个节点外,所有节点都有一个额外的参数,用于确定相对于其他节点的位置。例如,[above=of maintopic]
意味着该节点应该出现在名为maintopic
的节点上方。为了使此定位系统正常工作,必须在导言中添加\usetikzlibrary{positioning}
。如果没有positioning
库,您可以使用语法above of=maintopic
,但定位语法更灵活和强大:您可以将其扩展为写成above=3cm of maintopic
,即控制相对于maintopic
的实际距离。\draw[->] (uppercircle.south) -- (maintopic.north);
:将绘制类似箭头的直线。语法在基本元素部分已经解释过。唯一的区别在于编写线的端点的方式:通过引用一个节点和相对于节点的位置。
小编有话说
本文主要介绍 TiKZ 包中基础知识:1. 基础元素:点,线和路径;2. 基本几何形状:圆,椭圆和多边形;3. 图表。
本文主要参考:TikZ package。在了解基础知识后,小编将继续学习如何使用
Mathcha
绘制图形并转化为 TeX 代码。
可视化推文推荐
R可视乎|空间地理数据可视化(1)
空间地理数据可视化之 ggplot2 包及其拓展
空间地理数据可视化之 tmap 包及其拓展
R可视乎|创建乐高版马赛克图
R可视乎|用R给心仪的对象表白吧