画的漂亮!用 LaTeX 绘制函数图、统计图与几何图

文摘   2024-08-29 11:30   上海  

我们不仅可以用 LaTeX 写出排版漂亮的文档,还能用它绘制精美的图形!是的LaTeX还是一个强大的绘图神器。今天,我们就来聊聊如何用 LaTeX 绘制函数图、统计图与几何图

为什么选择 LaTeX 绘图?

说起绘图,实际上我们有很多工具可以选择,用LaTeX 的绘图功能不仅仅是为了满足科学论文中的图表需求,还主要是为了创建与文本高度一致的图形,这样呈现效果更好。而且结果往往比想象的还要漂亮。

准备工作:引入 tikz 包

我们需要用到 LaTeX 的 tikz 包。这个包功能很强大,简单的几何图形到复杂的三维图像都能绘制。要使用它,只需要在导言区引入:

\usepackage{tikz}
\usepackage{pgfplots} % 绘制函数图的强力包
\usepackage{tikz-3dplot} % 绘制三维图形的包

同时为了正常显示中文,可以引入ctex包以及将编译器调整为 XeLaTeX.

\usepackage{ctex}

对于一些特殊图形,需要一些特殊的包,比如tkz-euclide 绘制圆锥。这些预备步骤完成后,我们就可以正式开始绘图了。

绘制函数图

基础函数图

首先,让我们从绘制函数图开始。比如,你想展示一个经典的二次函数  ,看看这段代码:

\begin{figure}[h!]
\centering
\begin{tikzpicture}
\begin{axis}[
axis lines = middle, % 坐标轴通过原点
xlabel = $x$, % x 轴标签
ylabel = $y$, % y 轴标签
title = {$y = x^2$}, % 图表标题
grid = both, % 显示网格
]
\addplot[
domain=-2:2, % 定义 x 的范围
samples=100, % 采样点数
thick, % 线条粗细
color=blue, % 线条颜色
]{x^2};
\end{axis}
\end{tikzpicture}
\caption{二次函数 $y = x^2$ 的图像}
\end{figure}


上面的代码会生成一个漂亮的二次函数图,带有中线、网格以及自定义颜色。你可以通过调整 domain 和 samples 参数来控制图像的细节。是不是也很简单、直接?

多函数图

例如,下面的代码展示了如何在同一坐标系中绘制两个函数:

\begin{tikzpicture}
\begin{axis}[
title={Quadratic and Cubic Functions}, % 设置图表标题
xlabel={$x$}, % x 轴标签
ylabel={$y$}, % y 轴标签
legend pos=north west, % 图例位置
grid=major, % 设置主要网格
axis lines = middle, % 轴线通过原点
]
% 绘制 y = x^2
\addplot [
domain=-2:2,
samples=100,
color=blue,
]
{x^2};
\addlegendentry{$y = x^2$} % 为第一条曲线添加图例

% 绘制 y = x^3
\addplot [
domain=-2:2,
samples=100,
color=red,
]
{x^3};
\addlegendentry{$y = x^3$} % 为第二条曲线添加图例

\end{axis}
\end{tikzpicture}

通过这些代码,可以轻松地将不同的函数展示在同一图表中,便于对比和分析。

3D 图

如果你需要绘制更复杂的三维图形,LaTeX 也同样可以胜任。以下是一个简单的三维函数图的示例:

\begin{tikzpicture}
\begin{axis}[
view={60}{30}, % 设置视角 (仰角, 旋转角)
xlabel={$x$},
ylabel={$y$},
zlabel={$z$},
title={3D Surface Plot}, % 图表标题
]
\addplot3[
surf, % 表面图
mesh/ordering=y varies, % 设置网格
]
{sin(deg(x)) * cos(deg(y))}; % 3D 函数表达式
\end{axis}
\end{tikzpicture}

这一段代码将生成一个立体的三维曲面图,帮助更好地展示复杂的数学模型或物理现象。

统计图

接下来,让我们看看如何用 LaTeX 绘制一些常见的统计图形,比如散点图、折线图、柱状图和饼图。这些图形在数据分析和科研报告中非常实用。

散点图

\begin{tikzpicture}
\begin{axis}[
xlabel={$x$},
ylabel={$y$},
title={Scatter Plot Example}, % 图表标题
grid=major, % 添加网格
]
\addplot[
only marks, % 仅绘制数据点
color=blue, % 数据点颜色
]
coordinates {
(0,0) (1,1) (2,4) (3,9) (4,16) (5,25)
};
\end{axis}
\end{tikzpicture}

散点图适合用于展示数据之间的关系,比如时间与增长的关系。

折线图

折线图对于展示数据随时间变化的趋势非常有效。

\begin{figure}[h!]
\centering
\begin{tikzpicture}
\begin{axis}[
xlabel={Time (s)},
ylabel={Amplitude},
title={Line Plot Example},
grid=major, % 显示网格
]
\addplot[
color=blue,
mark=square*,
mark options={scale=1.5}
]
coordinates {
(0,0) (1,2) (2,3) (3,5) (4,4) (5,3)
};
\end{axis}
\end{tikzpicture}
\caption{A Simple Line Plot} % 图注
\label{fig:lineplot}
\end{figure}

柱状图

柱状图则适合于对比不同类别的数据,图中的数据标签能够清楚地展示每个数据点的具体值。

\begin{tikzpicture}
\begin{axis}[
ybar, % 设置为柱状图
symbolic x coords={A,B,C,D}, % 定义 x 轴标签
xtick=data, % x 轴标签在数据点处
ylabel={Values}, % y 轴标签
title={Bar Chart Example}, % 图表标题
nodes near coords, % 在柱状图顶部显示数据值
]
\addplot coordinates {(A,1) (B,3) (C,5) (D,2)}; % 数据点
\end{axis}
\end{tikzpicture}

饼图

最后,饼图是展示数据比例分布的好工具:

\begin{figure}[h!]
\centering
\begin{tikzpicture}
\pie[
text=legend, % 显示图例
radius=3, % 饼图的半径
color={red, blue, green, yellow}
]{
30/Red,
30/Blue,
20/Green,
20/Yellow
}
\end{tikzpicture}
\caption{A Simple Pie Chart} % 图注
\label{fig:piechart}
\end{figure}

通过饼图,你可以直观地看到各部分占总体的比例,非常适合展示分布类的数据。

绘制几何图

接下来,我们试试绘制一些常见的几何图形,比如立方体、圆锥和球体。LaTeX 可以让这些图形看起来非常专业。

立方体

首先,我们可以绘制一个简单的立方体:

\begin{figure}[h!]
\centering
\begin{tikzpicture}
% 设置三维角度
\tdplotsetmaincoords{60}{120}
\begin{scope}[tdplot_main_coords]
% 绘制立方体的前面
\draw[thick] (0,0,0) -- (2,0,0) -- (2,2,0) -- (0,2,0) -- cycle;
% 绘制立方体的背面
\draw[thick] (1,1,2) -- (3,1,2) -- (3,3,2) -- (1,3,2) -- cycle;
% 连接前后面的立方体
\draw[thick] (0,0,0) -- (1,1,2);
\draw[thick] (2,0,0) -- (3,1,2);
\draw[thick] (2,2,0) -- (3,3,2);
\draw[thick] (0,2,0) -- (1,3,2);
\end{scope}
\end{tikzpicture}
\caption{一个立体的立方体}
\end{figure}

圆锥

接下来,我们试试绘制一个简单的圆锥:

\begin{figure}[h!]
\centering
\begin{tikzpicture}[scale=2, line width=1pt]
% 绘制底部的椭圆
\draw[densely dashed] (2,0) arc [start angle=0, end angle=180, x radius=2, y radius=0.75];
\draw (2,0) arc [start angle=0, end angle=-180, x radius=2, y radius=0.75];
% 绘制锥体的侧面线条
\draw[thick] (2,0) -- (0,4) -- (-2,0);
\end{tikzpicture}
\caption{一个圆锥}
\label{fig:cone}
\end{figure}

球体

最后,绘制一个球体:

\begin{figure}[h!]
\centering
\begin{tikzpicture}
\def\R{4} % 切面半径
\fill[ball color=white!10] (0,0) circle (\R); % 3D 效果的球
\end{tikzpicture}
\caption{一个立体的球体}
\end{figure}

用 LaTeX 绘图的最大优势在于图形与文本的无缝融合,以及可以轻松调整的参数化绘制方式。你不需要在外部软件中绘图再导入,而是直接在 LaTeX 中生成图形,保证了图文的风格统一。此外,LaTeX 生成的图形具有矢量特性,放大后依然保持高清,不会有失真问题。(作者:王海华)

赶紧动手试试吧,用 LaTeX 画出属于你的漂亮图形!


参考资料:
【1】https://zhuanlan.zhihu.com/p/494100190
【2】https://zhuanlan.zhihu.com/p/681308905

模型视角
一个资深数学建模爱好者的知识、视角和建模乐趣分享!主理人:王海华,数学建模教师,著有《模型,就是数学化的思维》《数学建模实战:手把手教你参加数学建模竞赛》,参编《数学建模:教学设计与案例》《高中STEM精品课程资源课例》等。
 最新文章