在科研论文写作中,我们经常需要放大局部图片来显示细节,即绘制图中图。在Matlab中可以使用magnify或则axes函数,网上有很多例子,这里不再赘述。本文主要讲解如何使用tikz/pgfplots来画局部放大图中图。

绘制局部放大图,需要使用到spy宏包,本文主要参考pgfplots手册。下面给出一个最简单的实例,具体代码如下:

\documentclass[10pt, final, journal, twocolumn, oneside]{IEEEtran}%!TEX program = xelatex
% !TEX encoding = UTF-8  (utf8)
%!TEX spellcheck
\def\pgfsysdriver{pgfsys-dvipdfmx.def}
\usepackage{tikz}\usepackage{pgfplots}
\usetikzlibrary{spy} %
\pgfplotsset{width=7cm,compat=1.14}\begin{document}\begin{tikzpicture}[spy using outlines= {circle, magnification=6, connect spies}]
% define the shape of spy: circle or rectangle
\begin{axis}[no markers,grid=major, every axis plot post/.append style={thick}]\addplot coordinates {(0, 0) (0, 0.9) (1, 0.9) (2, 1) (3, 0.9) (80, 0)}; \addplot+ [line join=round] coordinates {(0, 0) (0, 0.9) (2, 0.9) (3, 1) (4, 0.9) (80, 0)}; \addplot+ [line join=bevel] coordinates {(0, 0) (0, 0.9) (3, 0.9) (4, 1) (5, 0.9) (80, 0)};\addplot+ [miter limit=5] coordinates {(0, 0) (0, 0.9) (4, 0.9) (5, 1) (6, 0.9) (80, 0)};\coordinate (spypoint) at (3,1);% The point to be magnified
\coordinate (magnifyglass) at (60,0.7);% The point where to see
\end{axis}\spy [blue, size=2.5cm] on (spypoint) in node[fill=white] at (magnifyglass);
\end{tikzpicture}
\end{document}

结果如下:


代码简单易懂,也给出了部分注释。为了使得更加个性化,我们可以修改放大图的轮廓,或则背景色,具体代码如下:

\documentclass[10pt, final, journal, twocolumn, oneside]{IEEEtran}%!TEX program = xelatex
% !TEX encoding = UTF-8  (utf8)
%!TEX spellcheck
\def\pgfsysdriver{pgfsys-dvipdfmx.def}
\usepackage{tikz}\usepackage{pgfplots}
\usetikzlibrary{spy} %
\pgfplotsset{width=7cm,compat=1.14}\begin{document}
\begin{tikzpicture}[spy using overlays= {rectangle, magnification=6, connect spies}]
% define the shape of spy: circle or rectangle
\begin{axis}[no markers,grid=major, every axis plot post/.append style={thick}]\addplot coordinates {(0, 0) (0, 0.9) (1, 0.9) (2, 1) (3, 0.9) (80, 0)}; \addplot+ [line join=round] coordinates {(0, 0) (0, 0.9) (2, 0.9) (3, 1) (4, 0.9) (80, 0)}; \addplot+ [line join=bevel] coordinates {(0, 0) (0, 0.9) (3, 0.9) (4, 1) (5, 0.9) (80, 0)};\addplot+ [miter limit=5] coordinates {(0, 0) (0, 0.9) (4, 0.9) (5, 1) (6, 0.9) (80, 0)};\coordinate (spypoint) at (3,1);% The point to be magnified
\coordinate (magnifyglass) at (60,0.7);% The point where to see
\end{axis}\spy [green,size=2.5cm] on (spypoint) in node at (magnifyglass);
\end{tikzpicture}
\end{document}

显示效果如下:


由上图可以看到,相比于Matlab,这里局部放大图更加灵活和个性化。但是Matlab的局部放大图一般都有坐标轴,方便查看局部图的值大小。在Tikz/pgfplots中利用Spy宏包实现相同的效果比较困难。但是我们可以另辟蹊径: 只需要利用node,在node中重新画一个图,只是自己设置横纵坐标的值,从而实现局部放大。具体代码实现如下:

\documentclass[10pt, final, journal, twocolumn, oneside]{IEEEtran}%!TEX program = xelatex
% !TEX encoding = UTF-8  (utf8)
%!TEX spellcheck
\def\pgfsysdriver{pgfsys-dvipdfmx.def}
\usepackage{tikz}\usepackage{pgfplots}
\usetikzlibrary{spy} %
\pgfplotsset{width=7cm,compat=1.14}\begin{document}
\begin{tikzpicture}[pin distance=1.5cm]
\begin{axis}[no markers,grid=major, every axis plot post/.append style={thick}]\addplot coordinates {(0, 0) (0, 0.9) (1, 0.9) (2, 1) (3, 0.9) (80, 0)}; \addplot+ [line join=round] coordinates {(0, 0) (0, 0.9) (2, 0.9) (3, 1) (4, 0.9) (80, 0)}; \addplot+ [line join=bevel] coordinates {(0, 0) (0, 0.9) (3, 0.9) (4, 1) (5, 0.9) (80, 0)};\addplot+ [miter limit=5] coordinates {(0, 0) (0, 0.9) (4, 0.9) (5, 1) (6, 0.9) (80, 0)};\coordinate (spy_point) at (axis cs:0,1);
\end{axis}
%plot the magnified figure using a node
\node[pin=-5:{%\begin{tikzpicture}\begin{axis}[no markers, thick,scale=0.8,tiny,xlabel={x},ylabel={y},xmin=0,xmax=8,ymin=0.85,ymax=1.05,enlargelimits,]\addplot coordinates {(0, 0) (0, 0.9) (1, 0.9) (2, 1) (3, 0.9) (80, 0)}; \addplot+ [line join=round] coordinates {(0, 0) (0, 0.9) (2, 0.9) (3, 1) (4, 0.9) (80, 0)}; \addplot+ [line join=bevel] coordinates {(0, 0) (0, 0.9) (3, 0.9) (4, 1) (5, 0.9) (80, 0)};\addplot+ [miter limit=5] coordinates {(0, 0) (0, 0.9) (4, 0.9) (5, 1) (6, 0.9) (80, 0)};\end{axis}\end{tikzpicture}%
}] at (spy_point) {};
\end{tikzpicture}

结果如下:

【漫漫科研路\pgfplots】画局部放大图相关推荐

  1. 【漫漫科研路\pgfplots】克服绘制色温图时,数据量大出现的内存限制

    在科研论文写作中,经常会遇到画色温图,3D图.此时一般输入的数据量比较大,导致在Latex中使用Tikz画图时出现内存不足的情况.常常报错如下: ! TeX capacity exceeded, so ...

  2. 【漫漫科研路\pgfplots】子图的多种画法

    在科研论文写作中,有时候为了横向.纵向对比或者节省空间,我们需要画子图,在MATLAB中可以通过subplot命令来实现.在Latex中有以下几种方法进行子图的绘制: - 使用subfig宏包(有可能 ...

  3. 【漫漫科研路\pgfplots】多个子图共用一个图例

    十月底,投完会议之后,便对科研写作方面遇到的问题进行了探索.问题主要有: 问题: 文献管理问题:在写论文的过程中,经常要引用他人文献,这时需要费时去寻找.另一方面,有时想要查看曾经读到的某篇文章提到的 ...

  4. 【漫漫科研路\PythonTikz】画神经网络相关图

    前一篇文章[图解例说机器学习]神经网络中,由于篇幅有限,我们只介绍了其理论部分.作为补充,本文主要介绍文中所有图像的绘制(使用Tikz或者Python).对于神经网络中的框架图 (例如神经元,神经网络 ...

  5. 【漫漫科研路\CC++】CPLEX解SOCP问题

    IBM CPLEX可以解SOCP问题,但是需要先将这个SOCP问题化为指定的格式.本文首先介绍SOCP问题,然后举例介绍如何将SOCP问题转化为CPLEX认可的输入格式并求解. SOCP的介绍 关于S ...

  6. 高文院士:从“乡村教师”到人工智能掌舵者的40年科研路

    成为一名工程师,是高文从小以来的梦想.在那个物质匮乏的年代,怀着对梦想的执着,高文从初中开始,便和周围的朋友一起玩无线电.摆弄收音机.凭借着这份单纯的执着,从哈尔滨工业大学计算机应用博士.东京大学电子 ...

  7. Linux那些事儿 之 戏说USB(2)漫漫辛酸路

    USB的一生充满了PK,并在PK中发展,1.0.1.1.2.0,漫漫辛酸路,一把辛酸泪. 这张表是从USB2.0 spec里直接拿过来的,可以看出,它的高速模式最高已经达到了480Mbps,即60MB ...

  8. 重磅直播|嵌入式开发漫漫之路—从小白到技术骨干

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 大家好,本公众号现已开启线上视频公开课,主讲人通过B站直播间,对3D视觉领域相关知识点进行讲解,并在微 ...

  9. 兰艳艳:理想温暖10年科研路,女性可以柔和,更要自信、专业 | 妇女节特辑...

    她力量 近年来,"她"力量正在科学家群体中快速升温. 在一年一度的妇女节到来之际,智源社区选取了五位颇具代表性的女性科学家,进行了深度访谈.在她们中,有人选择食物图像识别,对选择的 ...

最新文章

  1. FPGA之异步时钟、同步时钟并存同步问题
  2. 关于建立完整商业应用软件框架库的设想
  3. 一个完整的操作UI线程的例子,用到了多种方式
  4. boost::subgraph用法的测试程序
  5. 【机器学习】降维技术-PCA
  6. 前端学习(3124):react-hello-react之对props进行限制
  7. Qt文档阅读笔记|Qt实践| HTTPS知识点-获取某站点SSL证书
  8. ASP.NET中获取URL重写前的原始地址
  9. 用js判断.net版本
  10. Jboss 中配置 Oracle数据源
  11. php pdo 抛出异常模式,php实现的PDO异常处理操作分析
  12. 利用python进行身份证号码大全_身份证号码设置显示格式,我用了最笨的办法,你有什么好办法吗?...
  13. 计算几何 - 你绝对找不到比这更好的计算几何
  14. dell 如何给raid分区_如何在 UEFI 配置的系统中访问 RAID 控制器设置
  15. VideoMAE 论文阅读
  16. 看到大神移植系统了,我来整理下市面上的系统...
  17. php下载安装方法,phpstudy 2016免费版-php开发环境下载 v2016.11.03 附带安装教程 - 安下载...
  18. PotPlayer播放蓝光片源及如何硬解码和音频源码输出
  19. Linux开发工具(3)——gcc/g++
  20. 网段、网络地址、广播地址、子网掩码的计算方法

热门文章

  1. 计算机基础知识结束语,公文写作和计算机基础知识.doc
  2. 航司和机场将如何应用物联网技术?
  3. 尚志一中2021年高考成绩查询,2021-2022学年黑龙江省哈尔滨市呼兰一中、阿城二中、宾县三中、尚志五中联考高二(上)期中英语试卷(完美版).pdf...
  4. 微信小机器人 wxpy模块,自动化发送消息
  5. C语言编写简单的朗读小工具
  6. 字节跳动三面面试整理
  7. 代码详解设计模式汇总
  8. Grade for Android 之一:Groovy概述
  9. python double free_double free or corruption的原因
  10. opencv学习-形态学操作应用-提取图片中的文字