在科研论文写作中,经常会遇到画色温图,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】克服绘制色温图时,数据量大出现的内存限制相关推荐

  1. 【漫漫科研路\pgfplots】画局部放大图

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

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

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

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

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

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

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

  5. Python绘制极化图时坐标轴的旋转及两散点图的叠加绘制

    Python绘制极化图时坐标轴的旋转及两散点图的叠加绘制 我的sen_angle是n*2的数组,第一列是卫星方位角,第二列是卫星天顶角,sun_angle第一列是太阳方位角,第二列是太阳天顶角. im ...

  6. 《C++程序设计原理与实践》笔记 第15章 绘制函数图和数据图

    本章讨论绘制函数图和数据图的基本机制.关键例子是绘制一元函数图像,以及展示从文件中读取的值. 15.1 引言 我们的主要目标不是输出的美观性,而是理解如何生成这样的图形输出以及所使用的编程技术.你会发 ...

  7. 面试官问单表数据量大一定要分库分表吗?我们用六个字和十张图回答

    1 文章概述 在业务发展初期单表完全可以满足业务需求,在阿里巴巴开发手册也建议:单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表,如果预计三年后数据量根本达不到这个级别,请不要在创建表时 ...

  8. Echars 折线图 自动向右平移显示数据(数据量大的时候适应)

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>Ech ...

  9. 应用Python绘制雷达图时遇到的坑

    ValueError: The number of FixedLocator locations (9), usually from a call to set_ticks, does not mat ...

最新文章

  1. addTwoNumbers
  2. 直接拿来用!最火的iOS开源项目
  3. Java中集合(三)Stack
  4. Parcel是个好玩意儿
  5. DateTimeToUnix/UnixToDateTime 对接时间转换
  6. Memcached入门指南
  7. Spring Cloud实战小贴士:Zuul统一异常处理(三)【Dalston版】
  8. java飞机大战分数累加代码_JAVA 基础编程练习题39 【程序 39 分数累加】
  9. 西南交通大学计算机网络,西南交通大学计算机网络实验2015-2016第2学期期末试卷...
  10. mset redis_redis mset string 命令简介
  11. 2014025675 《嵌入式系统程序设计》第七周学习总结
  12. 打印等腰三角形javascript
  13. 引用类型--Object类型、Array类型
  14. 《Windows Server 2012 Hyper-V虚拟化管理实践》——2.3 Hyper-V角色安装后的状态
  15. 木瓜移动SaaS平台——木瓜大橙直击当下跨境电商企业出海六大痛点
  16. MES管理系统这5个模块,可保障板式定制家具的生产需求
  17. 阿里云商标安心注册服务失败不通过可以退款?
  18. 前端JSON格式化显示
  19. React学习笔记之三(关于setState的若干问题及其讨论)
  20. CCF过程记录以及经验总结

热门文章

  1. BM13-判断一个链表是否为回文结构
  2. 主链增幅最高飚至152%,主流币却惊现回落;以太坊发币速度持续放缓
  3. 错误解决:IllegalArgumentException occurred calling getter of *
  4. 还在使用Postman吗?out了兄弟,快来解锁Apifox这款国产化API工具吧
  5. 接口和抽象类的区别是什么?抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?
  6. 考研复试面试专业问题
  7. luminati 还原IP端口数据
  8. 怎么上永久免费的GPU与TPU服务器colab
  9. ENDNOTE使用方法(转发)
  10. 阿里云OSS文件上传,后台签名方案