【漫漫科研路\pgfplots】克服绘制色温图时,数据量大出现的内存限制
在科研论文写作中,经常会遇到画色温图,3D图。此时一般输入的数据量比较大,导致在Latex中使用Tikz画图时出现内存不足的情况。常常报错如下:
! TeX capacity exceeded, sorry [main memory size=5000000].
参考pgfplots手册中的第六章,我们有以下解决方案:
- 使用LuaTex进行编译
有些版本不含LuaTex - 对输入数据采样降低数据量
不是从本质上解决问题,降低了精度 - 使用其它软件画图,e.g., MATLAB
- 增大LaTex的编译内存
本文主要介绍如何在MacOS系统中Texlive平台下,克服内LaTex内存限制。关于在Linux和MiKTEX环境下,pgfplots手册已给了说明,这里不再赘述。
解决办法:在Texlive安装目录中找到texmf.cnf文件并编辑:
其安装目录在:
/usr/local/texlive/2018/texmf-dist/web2c/texmf.cnf
注意:/usr/local/texlive/2018/texmf.cnf也有相同的文件,编辑这个文件无法解决问题
其内容修改如下:
注意:修改的内存大小不能超过实际内存大小,我的是8G.
最后,打开终端进入安装目录下,执行
sudo texhash
若发生文件不可写的情况,可以使用chmod 777 来更改文件读写权限。
下面,我们通过实例来验证:
数据产生
我们使用Matlab的peaks函数来产生peaks.dat文件用于tikz画图的输入数据。其代码如下:clear all clc close alllambda_total=2;% the sum of Z [X,Y,Z] = peaks(100); Z(Z<0)=0; Z=Z/sum(sum(Z))*lambda_total;x_temp=repmat(1:100,100,1);% X-axis x_temp=x_temp(:); y_temp=repmat(1:100,1,100);%Y-axisxyz=['x y z']; dlmwrite('peaks.dat',xyz,'delimiter',' '); for x_ind=1:size(Z,1)for y_ind=1:size(Z,2)% for one point (x,y,z), we use 4 coordinates (x,y,z) (x,y+1,z) (x+1,y+1,z) (x+1,y,z) to form a patchxyz=[x_ind y_ind Z(x_ind, y_ind);x_ind y_ind+1 Z(x_ind, y_ind);x_ind+1 y_ind+1 Z(x_ind, y_ind);x_ind+1 y_ind Z(x_ind, y_ind)];if(x_ind==1&&y_ind==1)dlmwrite('peaks.dat',xyz,'delimiter',' ','-append','roffset',0);elsedlmwrite('peaks.dat',xyz,'delimiter',' ','-append','roffset',1);endend end
在Tikz中画图
本文使用了patch来画图,也可以改用surf, mesh等。完整latex源代码如下:\documentclass{standalone} \def\pgfsysdriver{pgfsys-dvipdfmx.def} \usepackage{tikz} \usepackage{pgfplots} \pgfplotsset{width=7cm,compat=1.14}\begin{document} \begin{tikzpicture} \begin{axis}[colorbar,xmin=1,xmax=101,ymin=1,ymax=101,xlabel={X-axis (m)},ylabel={Y-axis (m)},]\addplot [patch,patch type=rectangle] table [point meta=\thisrow{z}]{peaks.dat }; \end{axis} \end{tikzpicture} \end{document}
画图效果如下:
【漫漫科研路\pgfplots】克服绘制色温图时,数据量大出现的内存限制相关推荐
- 【漫漫科研路\pgfplots】画局部放大图
在科研论文写作中,我们经常需要放大局部图片来显示细节,即绘制图中图.在Matlab中可以使用magnify或则axes函数,网上有很多例子,这里不再赘述.本文主要讲解如何使用tikz/pgfplots ...
- 【漫漫科研路\pgfplots】子图的多种画法
在科研论文写作中,有时候为了横向.纵向对比或者节省空间,我们需要画子图,在MATLAB中可以通过subplot命令来实现.在Latex中有以下几种方法进行子图的绘制: - 使用subfig宏包(有可能 ...
- 【漫漫科研路\pgfplots】多个子图共用一个图例
十月底,投完会议之后,便对科研写作方面遇到的问题进行了探索.问题主要有: 问题: 文献管理问题:在写论文的过程中,经常要引用他人文献,这时需要费时去寻找.另一方面,有时想要查看曾经读到的某篇文章提到的 ...
- 【漫漫科研路\PythonTikz】画神经网络相关图
前一篇文章[图解例说机器学习]神经网络中,由于篇幅有限,我们只介绍了其理论部分.作为补充,本文主要介绍文中所有图像的绘制(使用Tikz或者Python).对于神经网络中的框架图 (例如神经元,神经网络 ...
- Python绘制极化图时坐标轴的旋转及两散点图的叠加绘制
Python绘制极化图时坐标轴的旋转及两散点图的叠加绘制 我的sen_angle是n*2的数组,第一列是卫星方位角,第二列是卫星天顶角,sun_angle第一列是太阳方位角,第二列是太阳天顶角. im ...
- 《C++程序设计原理与实践》笔记 第15章 绘制函数图和数据图
本章讨论绘制函数图和数据图的基本机制.关键例子是绘制一元函数图像,以及展示从文件中读取的值. 15.1 引言 我们的主要目标不是输出的美观性,而是理解如何生成这样的图形输出以及所使用的编程技术.你会发 ...
- 面试官问单表数据量大一定要分库分表吗?我们用六个字和十张图回答
1 文章概述 在业务发展初期单表完全可以满足业务需求,在阿里巴巴开发手册也建议:单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表,如果预计三年后数据量根本达不到这个级别,请不要在创建表时 ...
- Echars 折线图 自动向右平移显示数据(数据量大的时候适应)
<!DOCTYPE html> <html><head><meta charset="utf-8"><title>Ech ...
- 应用Python绘制雷达图时遇到的坑
ValueError: The number of FixedLocator locations (9), usually from a call to set_ticks, does not mat ...
最新文章
- addTwoNumbers
- 直接拿来用!最火的iOS开源项目
- Java中集合(三)Stack
- Parcel是个好玩意儿
- DateTimeToUnix/UnixToDateTime 对接时间转换
- Memcached入门指南
- Spring Cloud实战小贴士:Zuul统一异常处理(三)【Dalston版】
- java飞机大战分数累加代码_JAVA 基础编程练习题39 【程序 39 分数累加】
- 西南交通大学计算机网络,西南交通大学计算机网络实验2015-2016第2学期期末试卷...
- mset redis_redis mset string 命令简介
- 2014025675 《嵌入式系统程序设计》第七周学习总结
- 打印等腰三角形javascript
- 引用类型--Object类型、Array类型
- 《Windows Server 2012 Hyper-V虚拟化管理实践》——2.3 Hyper-V角色安装后的状态
- 木瓜移动SaaS平台——木瓜大橙直击当下跨境电商企业出海六大痛点
- MES管理系统这5个模块,可保障板式定制家具的生产需求
- 阿里云商标安心注册服务失败不通过可以退款?
- 前端JSON格式化显示
- React学习笔记之三(关于setState的若干问题及其讨论)
- CCF过程记录以及经验总结
热门文章
- BM13-判断一个链表是否为回文结构
- 主链增幅最高飚至152%,主流币却惊现回落;以太坊发币速度持续放缓
- 错误解决:IllegalArgumentException occurred calling getter of *
- 还在使用Postman吗?out了兄弟,快来解锁Apifox这款国产化API工具吧
- 接口和抽象类的区别是什么?抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?
- 考研复试面试专业问题
- luminati 还原IP端口数据
- 怎么上永久免费的GPU与TPU服务器colab
- ENDNOTE使用方法(转发)
- 阿里云OSS文件上传,后台签名方案