PGFPlots绘图简介
来源:互联网 发布:手机贴膜品牌 知乎 编辑:程序博客网 时间:2024/06/11 16:44
PGFPlots 是
1 绘制统计图
统计图常被用于数据分析。下面给出一些用 PGFPlots 绘制统计图的示例。
1.1 线图
线图有折线图和光滑折线图两种,我们用一个例子来演示两种线图的画法。
例1 给出一组数据
\documentclass[a4paper]{article} % 文件类型是A4纸的文章\usepackage{pgfplots} % 使用pgfplots绘图工具包\pgfplotsset{width=7cm,compat=1.13} % 图片绘制的宽度是7cm,使用的pgfplots版本为1.13\begin{document} % 文档开始\begin{tikzpicture} % 绘图开始\begin{axis} % 添加坐标\addplot+[sharp plot] % 调用绘图函数,并设置绘图的类型是折线图coordinates % 声明是在迪卡尔坐标系中的数据{ % 输入数据 (0,4) (1,1) (2,2) (3,5) (4,6) (5,1)};\end{axis} % 结束坐标\end{tikzpicture} % 绘图结束\end{document} % 文档结束
下面是绘制光滑折线图的代码和结果:
\documentclass[a4paper]{article}\usepackage{pgfplots}\pgfplotsset{width=7cm,compat=1.13}\begin{document}\begin{tikzpicture}\begin{axis}\addplot+[smooth] % 设置绘图的类型是光滑线图coordinates{ (0,4) (1,1) (2,2) (3,5) (4,6) (5,1)};\end{axis}\end{tikzpicture}\end{document}
1.2 条形图
条形图常用于展示各项目间的比较结果。
例2 给出一组数据
\documentclass[a4paper]{article}\usepackage{pgfplots}\pgfplotsset{width=7cm,compat=1.13}\begin{document}\begin{tikzpicture}\begin{axis}\addplot+[ybar] % 绘制关于y坐标的条形图coordinates{ (0,4) (1,1) (2,2) (3,5) (4,6) (5,1)};\end{axis}\end{tikzpicture}\end{document}
下面的例子演示如何对条形图进行填充来加强数据间的对比。
例3 根据数据
\documentclass[a4paper]{article}\usepackage{pgfplots}\pgfplotsset{width=7cm,compat=1.13}\begin{document}\begin{tikzpicture}\begin{axis}[ybar,enlargelimits=0.15] % 绘制关于y坐标的条形图,条形之间的最大间隔是0.15cm\addplot[draw=blue,fill=red] % 蓝色边界、红色填充coordinates{ (0,4) (1,1) (2,2) (3,5) (4,6) (5,1)};\addplot[draw=black,fill=blue] % 黑色边界、蓝色填充coordinates{ (0,3) (1,4) (2,2) (3,9) (4,6) (5,2)};\end{axis}\end{tikzpicture}\end{document}
1.3 直方图
直方图又称为质量分布图,是最常用统计图之一。直方图的绘制方式与前面两种统计图略有不同,它依赖于 PGFPlots (?) 自身的计算功能。
例4 绘制数据
\documentclass[a4paper]{article}\usepackage{pgfplots}\pgfplotsset{width=7cm,compat=1.13}\begin{document}\begin{tikzpicture}\begin{axis}[ybar interval] % 绘制y条形图,并且分隔出区间\addplot[hist={bins=3}] % 绘制图像设置为直方图,组距为3table[row sep=\\,y index=0] % 设置表的行以"\\"分隔,y的从0开始{ data\\ % 输入数据 1\\ 2\\ 1\\ 5\\ 4\\ 10\\ 7\\ 10\\ 9\\ 8\\ 9\\ 9\\};\end{axis}\end{tikzpicture}\end{document}
2 线性回归
在 PGFPlots 中只能拟合一次函数,不能拟合更高次数的函数。下面给出一个示例。
例5 绘制数据
\documentclass[a4paper]{article}\usepackage{pgfplots}\usepackage{pgfplotstable}\pgfplotsset{width=7cm,compat=1.13}\begin{document}\begin{tikzpicture}\begin{axis}[legend pos=outer north east] % 将图例放在图外,位于图的东北角\addplot table % 绘制原始数据的折线图{ % X,Y的原始数据 X Y 1 1 2 4 3 9 4 16 5 25 6 36};\addplottable[y={create col/linear regression={y=Y}}] % 对输入的数据作线性回归{ X Y 1 1 2 4 3 9 4 16 5 25 6 36};\addlegendentry{$y(x)$} % 给第一个图像添加图例,即原始函数y(x)\addlegendentry{ % 给第二个图像添加图例,即线性回归结果a*x+b$\pgfmathprintnumber{\pgfplotstableregressiona} \cdot x\pgfmathprintnumber[print sign]{\pgfplotstableregressionb}$}\end{axis}\end{tikzpicture}\end{document}
3 绘制函数图像
PGFPlots 最重要的功能是绘制函数图像,用它绘制二维和三维函数图像非常的简单。接下来,我们将分别展示一些基本函数图像的绘制。
3.1 二维显式函数图像
例6 绘制三角函数
\documentclass[a4paper]{article}\usepackage{pgfplots}\pgfplotsset{width=7cm,compat=1.13}\begin{document}\begin{tikzpicture}\begin{axis}\addplot+[domain=0:2*pi] % 设置函数的定义域 {sin(deg(x))}; % 输入显式函数\addplot+[domain=0:2*pi] % 设置函数的定义域 {cos(deg(x))}; % 输入显式函数\end{axis}\end{tikzpicture}\end{document}
3.2 三维显式函数图像
例7 绘制函数
\documentclass[a4paper]{article}\usepackage{pgfplots}\usepgfplotslibrary{colorbrewer}\pgfplotsset{width=7cm,compat=1.13}\begin{document}\begin{tikzpicture}\begin{axis}[colorbar] % 绘制坐标,并设置一个彩色指示条\addplot3[surf] % 绘制三维图 {x^2+y^2}; % 输入二元显式函数\end{axis}\end{tikzpicture}\end{document}
我们也可以绘制一些漂亮而“复杂”的三维图像,如下图的“帽子图”。
\documentclass[a4paper]{article}\usepackage{pgfplots}\usepgfplotslibrary{colorbrewer}\pgfplotsset{width=7cm,compat=1.13}\begin{document}\begin{tikzpicture}\begin{axis}[ title=Example using the mesh parameter, %图像的标题 hide axis, %隐藏坐标 colormap/cool, %颜色风格]\addplot3[ mesh, %绘制的三维图像是网格 samples=50, %定义域分割数量 domain=-8:8, %定义域]{sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2)}; %二元显式函数\addlegendentry{$\frac{sin(r)}{r}$} %添加图例\end{axis}\end{tikzpicture}\end{document}
3.3 隐式函数图像
隐式函数图像的绘制非常复杂。(在 Matlab 中,我们可以利用 isosurface 函数直接绘制隐式函数图像。)一般情况下,我们需要先把隐式函数转化成显式函数或者参数方程的形式。接下来,我们给出一个具体的在 PGFPlots 中绘制隐式函数的示例。
例8 绘制隐函数
\documentclass[a4paper]{article}\usepackage{pgfplots}\pgfplotsset{width=7cm,compat=1.13}\newcommand*{\A}{2} %定义新命令\A为2\newcommand*{\num}{3} %定义新命令\num为3 \pgfmathdeclarefunction{SolutionX}{1}{ % X的参数方程 \pgfmathparse{\A*(cos(deg(\t)))}}\pgfmathdeclarefunction{SolutionY}{1}{ % Y的参数方程 \pgfmathparse{\A*(sin(deg(\t)))}}\tikzset{elegant/.style={smooth, red, thick, samples=101}} % 定义风格\begin{document}\begin{tikzpicture} \begin{axis}[axis lines=middle, % 设置坐标风格 xmin=-\num, xmax=\num, % 坐标的范围 ymin=-\num, ymax=\num, xlabel=$x$, ylabel=$f(x)$] % 横纵坐标的标签\addplot[elegant,variable=\t, domain=-2*pi:0] % 设置图像风格、变量、定义域({SolutionX(\t)},{SolutionY(\t)}); % 绘制隐函数的参数方程\end{axis}\end{tikzpicture}\end{document}
4 补充说明
4.1 条形图与直方图的区别
直方图相邻柱体之间没有间隔,而条形图则有。在条形图中,横轴上的数据是孤立的,是一个具体的数据;而在直方图中,横轴上的数据是连续的,是一个范围。条形图是用条形的高度表示频数的大小;而直方图是用长方形的面积表示频数。
4.2 为什么 PGFPlots 中只能绘制一次线性回归的图像
我猜测这是由计算的复杂度所致。我们可以使用公式我完成一次线性拟合;而二次(及以上)的回归模型是采用最小二乘法来进行拟合的,计算其系数需要求解一个系数矩阵为范德蒙德(Vandermonde)矩阵的线性方程组,计算非常复杂。
4.3 为什么 PGFPlots 中不能直接绘制隐式函数的图像
因为直接绘制隐式函数的图像涉及到求解方程(组),而且往往是求解非线性方程(组),需要的计算量将非常的庞大。比如说,含有两个未知变量的隐函数
4.4 一些未解决的疑问
- 线性回归的函数的实现细节。
- 哪种绘制隐式函数图像的方法比较好用,是转成参数的形式,还是转化成显式函数的形式?
- PGFPlots绘图简介
- LaTeX绘图包Pgfplots package
- 在LaTeX中使用强大的pgfplots绘图包
- LaTeX中绘图工具包PGFPlots(1.13)的安装
- 绘图: Python matplotlib简介
- Android绘图知识点简介
- iOS drawing 绘图简介
- Quartz2D绘图简介
- matplotlib plot绘图简介
- Tex系列: pgfplots安装
- Latex pgfplots package
- VB OpenGL绘图 -------OpenGL简介
- 绘图 Raphael js库简介
- Quartz 2D绘图简介
- Python应用matplotlib绘图简介
- Java绘图功能简介-Graphics
- markdown绘图插件----mermaid简介
- latex: pgfplots多个图分组显示
- c++学习之virtual的使用限制
- Unix和Linux有什么区别? 通俗解释
- GPDB · 特性分析· GreenPlum Primary/Mirror 同步机制
- C# 字体池技术实现
- PM应知晓的互联网产品研发改进之路
- PGFPlots绘图简介
- 画矩形
- 前端学习的开始
- deepin 2014中chrome扩展安装与android apk运行
- Service (aidl远程服务)
- 关于禁用数据库访问方法
- Android中关于Activity/ActionBarActivity/AppCompatActivity的区分与理解
- 数据结构(寒假小结)--3.1桟
- 命令和快捷键小结