文章目录

  • 环境搭建
  • 命令方式
  • 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框,如下图表示环境搭建成功:

android cnavas画正弦_android cnavas画正弦


  搭建好环境后,我介绍四种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}

  效果如下:

android cnavas画正弦_android cnavas画正弦_02


  但是上述函数是没有坐标系的。下面就加上坐标系:

\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}

  加上坐标系效果就好看多了:

android cnavas画正弦_环境搭建_03

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}

  效果如图:

android cnavas画正弦_开发语言_04

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}

  编译后效果如下:

android cnavas画正弦_ci_05

嵌入方式

 有时候不需要这么麻烦,我们可以直接在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文档中,效果如图:

android cnavas画正弦_环境搭建_06

  目前主流就三种方式,其余的,诸如png方式我就不再赘述了。但是我不建议使用第三种,最好用前两种。道理很简单,假如有一天要转为markdown呢?所以使用前两种有天然的好处,迁移是图片还能被兼容。