文章目录
- 环境搭建
- 命令方式
- PDF方式
- EPS方式
- 嵌入方式
环境搭建
在实际的工作中,绘制函数图像是刚需。一般来说,有在线函数图形绘图网站,也有专业软件比如OriginalLab。但是这两者都有天然缺陷,前者功能比较少,后者收费比较高。所以对于程序员来说,最适合的莫过于LaTex。LaTex绘制函数图像需要用到tikz包,而绘制函数图像时,tikz用的是第三方的gnuplot。下面我以正弦函数为例子讲述正弦函数图形的绘制。当然同graphviz一样,Latex也可以不通过tikz这个中间层,直接集成gnuplot。
安装完成后,需要将gunplot的bin目录假如到环境变量path中,这样gnuplot命令才会有效。可以简单测试下安装是否成功,如下,输入命令gnuplot,在交互界面输入plot [-4:4] sin(x),绘制一条简单的函数:
PS J:\java-book\latex\plot> gnuplot
G N U P L O T
Version 5.5 patchlevel 0 last modified 2022-05-30
Copyright (C) 1986-1993, 1998, 2004, 2007-2022
Thomas Williams, Colin Kelley and many others
gnuplot home: http://www.gnuplot.info
mailing list: gnuplot-beta@lists.sourceforge.net
faq, bugs, etc: type "help FAQ"
immediate help: type "help" (plot window: hit 'h')
Terminal type is now 'qt'
Encoding set to 'cp1252'.
gnuplot>
(process:6924): GLib-GIO-WARNING **: 15:00:55.036: Unexpectedly, UWP app `HaukeGtze.7-ZipFileManagerUnofficial_1.2107.2.0_x64__6bk20wvc8rfx2' (AUMId `HaukeGtze.7-ZipFileManagerUnofficial_6bk20wvc8rfx2!zFM.exe') supports 36 extensions but has no verbs
plot [-4:4] sin(x)
gnuplot>
随后会弹出一个GUI框,如下图表示环境搭建成功:
搭建好环境后,我介绍四种gnuplot与LaTex集成的方式。
命令方式
如果是简单画一个正弦函数,代码很简单:
\documentclass[UTF8, a4paper,12pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw [smooth,domain=0:7] plot function{sin(x)};
\end{tikzpicture}
\end{document}
效果如下:
但是上述函数是没有坐标系的。下面就加上坐标系:
\documentclass[UTF8, a4paper,12pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw [<->,thick] (0,2) node (yaxis) [above] {$y$}
|- (7,0) node (xaxis) [right] {$x$};
\draw [smooth,domain=0:7] plot function{sin(x)};
% draw x ,y points (Values)
\foreach \x in {0,1,2,3,4,5,6,7}
\draw (\x cm,1pt) -- (\x cm,-1pt) node[anchor=north] {$\x$};
\foreach \y in {1,2}
\draw (1pt,\y cm) -- (-1pt,\y cm) node[anchor=east] {$\y$};
\end{tikzpicture}
\end{document}
加上坐标系效果就好看多了:
PDF方式
GP是gnuplot的简称,它的代码文件后缀没有统一的规定,一般以.gp或.gnuplot为后缀,我以正弦函数为例子,简单写一个sin.gp文件,内容如下:
set terminal pdf
set output "sin.pdf"
plot [-4:4] sin(x)
在操作系统终端执行命令 gnuplot .\sin.gp就可以生成pdf文件了。随后我们将这个文件包含进我们的tex文件,如以下代码:
\documentclass[UTF8, a4paper,12pt]{article}
\usepackage{graphicx}
\begin{document}
\includegraphics{./sin.pdf}
\end{document}
效果如图:
EPS方式
这里我换个例子,用双曲正弦为例子,先写个文件sinh.gp,写入以下内容:
set terminal epslatex
set output "sinh.tex"
plot [-4:4] sinh(x)
用命令生成tex文件和eps文件后,就可以在LaTex中引用了,如以下代码:
\documentclass[UTF8, a4paper,12pt]{article}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage[cp1252]{inputenc}
\begin{document}
\include{./sinh.tex}
\end{document}
编译后效果如下:
嵌入方式
有时候不需要这么麻烦,我们可以直接在tex文档中直接嵌入gnuplot代码,如下列LaTex代码:
\documentclass[UTF8, a4paper,12pt]{article}
\usepackage{tikz}
\usepackage{ctex}
\usepackage{gnuplottex}
\usetikzlibrary{calc,angles,quotes}
\begin{document}
双曲正弦与双曲余弦
\begin{figure}
\begin{gnuplot}[terminal=pdf,terminaloptions=color dashed]
plot [-4:4] sinh(x),cosh(x)
\end{gnuplot}
\end{figure}
\end{document}
编译时它会调用gnuplot,编译为pdf图片,然后再引入最终的pdf文档中,效果如图:
目前主流就三种方式,其余的,诸如png方式我就不再赘述了。但是我不建议使用第三种,最好用前两种。道理很简单,假如有一天要转为markdown呢?所以使用前两种有天然的好处,迁移是图片还能被兼容。