latex论文作图(python+matplotlib)

2023-05-16

20210425 -

0. 引言

论文中进行作图,需要对图片中的各种元素进行控制,最近在论文写作过程中为了能够得到匹配文章的高质量图片,也是花了很多心血。除了对图片中的风格进行控制,另一方面比较重要的就是控制其中各种元素的大小等信息。本篇文章将从这个角度出发,来记录一下最近看到的一些比较好的文章以及自己的一些体会。

1. 基础知识

在平时进行绘图的过程中,可能也就是控制控制图片大小,figsize=(10,8),然后可能再控制控制一些元素的大小,例如线宽,标题字体大小等。虽然能够达到一定的效果,但是这里存在一个比较严重的问题。在使用latex插入论文图片的时候,经常会进行图片的缩放。虽然对于图片的所呈现的具体内容可能没有太大影响,而且使用的图片类型多是pdf格式,也不会出现比例失调的情况。但是这种方式会导致图中的字体元素也同时被缩放。一旦被缩放,就会导致图片中的字体大小与论文中的大小关系不协调。例如latex插入的图片标题和图片中坐标中的字体的大小差距就很大。

那么在解决这个问题之前,先回顾一下matploblib中一些大小的概念,主要包括图片大小,DPI,PPI等,该部分内容主要参考问答[1]。

创建图像时,会指定figsize,例如figsize = (10,8),注意这里的单位是英寸。平时作图保存为pdf格式之后,利用pdf阅读器打开,可能默认缩放到屏幕大小,也就看不出来图片大小是不是变化,改为100%缩放之后,就能看到图片的大小。

而DPI,全称为Dots per inches,每英寸的像素点,在matplotlib中默认的DPI是100。这样往后顺推之后,为了得到某个像素大小的图片,就可以有多种组合方式,可以通过扩大图片大小来实现,也可以增大DPI来实现。

正常情况下,指定的字体或者字高(框住字体的框子的高度)来扩大大小;对于图片中的元素,matplotlib默认使用72 ppi(Points per inch)。那么如果线宽是1个点的话,在dpi为72的时候,这正好就是一个像素。这样就是一个对应的关系,而如果扩大了dpi,例如变成了144dpi,那么线宽就是两个像素。
在这里插入图片描述
上面这个图片就展示这个过程,分别是72和144dpi,因为这个线是斜线,所以扩大了之后显得不是严格的1个和2个像素,但是能够体现出来这个关系。

那么从这个角度来说,如果增大了图片的大小,如果没有改变这个线宽或者元素的大小,两个图片中的元素大小都是一样的。而只有改变dpi之后才会有所变化。

(虽然是这么说,但是对于如果使用pdf这种格式来说,如果进行了缩放,是看不出来上面的效果的)

2. 论文中的图片大小控制

前面的内容介绍了跟大小有关的内容,有关这部分内容,之前在进行绘图的时候,越是深入的对这部分进行调整,就越觉得不对劲,还是一开始的时候没有把这部分内容了解清楚。那么这样之后,如果要达到前面要求的目的,就是图片中的字体大小和论文字体大小一样的话,如果图片大小很大,就容易导致文字缩放后达不到要求,这个比例也不是很好控制。比较好的办法就是,将图片字体和论文中字体调整为一致大小,同时保证这个图片的大小也基本上是占据这块空间的大小。。查看了几篇文章之后,方法都差不多。其中涉及这部分操作的有文章[2][3],两个文章的方法不完全一致,但都是在测量了论文的尺寸之后来进行操作。下面分别来进行介绍。

2.1 检查论文中图片尺寸

文章[2]的方法是,插入一个自适应的图片,设置图片宽度为列宽度(双列论文)(平时插入图片的时候都是使用了\textwidth)。

\begin{figure}
    \includegraphics[width=\columnwidth]{placeholder}
    \caption{This is a placeholder to measure the width of a plot. Its with is set to \texttt{columnwidth}.}
\end{figure}

然后利用inkscape软件来查看这个图片所占用的大小(单位英寸)同时字体大小设置为8pt
这里有些不同的是,他在保存图片的时候,没有使用tight layout的相关参数,文章作者推荐使用这种方法来控制,因为可能导致图片大小并不是最终想要的;而是在最后的时候调整了图片大小。在设置图片高度的时候使用了黄金比例。

import numpy as np
import matplotlib as mpl
mpl.use('pdf')
import matplotlib.pyplot as plt

plt.rc('font', family='serif', serif='Times')
plt.rc('text', usetex=True)
plt.rc('xtick', labelsize=8)
plt.rc('ytick', labelsize=8)
plt.rc('axes', labelsize=8)

# width as measured in inkscape
width = 3.487
height = width / 1.618

fig, ax = plt.subplots()
fig.subplots_adjust(left=.15, bottom=.16, right=.99, top=.97)

x = np.arange(0.0, 3*np.pi , 0.1)
plt.plot(x, np.sin(x))

ax.set_ylabel('Some Metric (in unit)')
ax.set_xlabel('Something (in unit)')
ax.set_xlim(0, 3*np.pi)

fig.set_size_inches(width, height)
fig.savefig('plot.pdf')

大致代码如下,其中利用subplots_adjust来调整主要图片的位置,这个部分是一定要谨慎调整到,防止某些部分被放置在图片外面。

2.2 通过论文宽度来调整

在文章[3]中,使用了另外的方法,在编译pdf文件的时候,先查看论文宽度是多少。

% your document class here
\documentclass{report}
\begin{document}

% gives the width of the current document in pts
\showthe\textwidth

\end{document}

然后通过公式来计算图片应该有的大小。但是他这里感觉更适用于单栏的环境。同时他采用了fig.savefig('example_1.pdf', format='pdf', bbox_inches='tight')的方法,与文章[2]有所不同。

2.3 小结

个人觉得,文章[2]的方法可能更直接,因为这样得到的尺寸是完全贴合论文大小的;文章[3]是通过计算的方式,最后保存的时候使用了bbox_inches的参数,平时使用这个参数都是为了调整旁边的空白位置,暂时没有深究这个参数是否会影响整个图片的大小,从而导致自己的缩放。

在使用的时候,个人感觉可以结合两者的方法,而且应该明白自己插入的时候到底图片应该是什么样的尺寸,这个是关键的。

最后两者在插入图片的时候,都是没有压缩的,也就是没有任何参数。

\begin{figure}
  \centering
  \includegraphics{figure_name.pdf}
\end{figure}

相关内容

学习过程中,还遇到过一些其他的内容,这些内容是介绍如何画出比较好看的图,基本上都是如何控制各个元素,全部应该考虑的内容。

  • matplotlib_for_papers
  • Styling plots for publication with matplotlib

参考

[1]Relationship between dpi and figure size
[2]Publication-Quality Plots with Matplotlib
[3]Plot publication-quality figures with matplotlib and LaTeX

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

latex论文作图(python+matplotlib) 的相关文章

随机推荐

  • 【tx2】——NVIDIA TX2--3--NVIDIA Jetson TX2 查看系统版本参数状态及重要指令

    NVIDIA Jetson TX2 查看系统参数状态 当前博主的TX2更新的版本为 xff1a Jetpack 3 3 cuda 9 0 252 cudnn7 0 opencv3 3 1 TensorRT4 0 2 系统内核 xff1a t
  • 训练深度学习模型时电脑自动重启

    文章目录 问题可能原因解决方案 问题 前面用自己的台式机利用GPU训练模型的时候 xff0c 电脑老是自动重启 xff0c 当时试了各种方法 xff0c 找了各种原因 电脑配置 电脑买的是二手的 xff0c xff08 强烈建议买新的 xf
  • 华为机试题[2017.8.23]

    题目 xff1a 给定一个正整数 xff0c 给出消除重复数字以后最大的整数 输入描述 xff1a 正整数 xff0c 注意考虑长整数 输出描述 xff1a 消除重复数字以后的最大整数 下面的好像有问题 xff0c 当输入是4325432时
  • Kubernetes(k8s)中dashboard的汉化

    1 访问服务器的http 192 168 110 133 8080 ui地址 xff0c 如下所示 xff1a 使用dashboard版本registry cn hangzhou aliyuncs com google containers
  • docker + Rancher + guacamole 容器环境搭建并配置vnc连接

    Rancher 43 guacamole 容器环境搭建 准备环境 xff1a docker ce 17 01 43 43 centos7 x 43 guacamole 最新版0 9 14 43 Rancher 搭建完成效果 xff1a 1
  • C语言习题(1)——字符串拷贝,去空格,奇偶抽取字符串

    1 字符串拷贝 作者 xff1a 一叶扁舟 作用 xff1a 字符串的拷贝 时间 xff1a 18 25 2017 5 1 include lt stdio h gt include lt string h gt include lt st
  • 基于安卓平台的滤镜功能相机

    1 1需求背景 爱美之心 xff0c 人皆有之 我们拍照是为了留住一个美好的瞬间 Android自带的相机拍照效果满足不了人们的爱美心理 xff0c 而且比较单一 xff1b 因此为了解决这个问题我们研 发 滤镜功能相机 滤镜功能相机主要基
  • 威廉·巴特勒·叶芝:“我们是最后的浪漫主义者”

    喜欢叶芝是一件很文艺的事情 叶芝的诗滋润了无数少男少女的情怀 在叶芝被茅德 冈 嫌弃的这一生中 我们不知道他是否曾经后悔 我感动了全世界 却感动不了你 但至少 他的诗 感动了后世无数人 题记 多少人曾爱你青春欢畅的时辰 爱慕你的美丽 假意或
  • Javassist即时编译技术,热修复核心与原理

    Java 字节码以二进制的形式存储在 class 文件中 xff0c 每一个 class 文件包含一个Java类或接口 Javaassist 框架就是一个用来处理 Java 字节码的类库 它可以在一个已经编译好的类中添加新的方法 xff0c
  • ubuntu系统编译安装

    Ubuntu程序安装是个很好理解的 xff0c 这里我发表一下个人理解 xff0c 下面就这就来讲术Ubuntu编译安装 Ubuntu编译程序新手指导Ubuntu 团队对它的使用者公开的承诺 Ubuntu 永远免费 并且对于 34 企业版本
  • Android Launcher浅析(一)

    Launcher桌面的一大功能就是支持左右滑动 xff0c 这样的功能在现在的应用中使用非常广泛 xff0c 并且有很多实现的方式 xff0c 可以通过使用Fragment来实现也可以通过自定义的控件来实现 Launcher采用了后者 xf
  • Android OTA升级

    1 xff0c Build otapackage后system img没有打包进去 xff1f Ota包里面缺失system img xff0c 原因是客户修改了prop里面的 ro product device value值 尝试以下两种
  • Android Launcher浅析(三)

    Launcher是系统启动后第一个启动的程序 是其它应用程序的入口 也就是我们的手机程序的桌面程序 一 Launcher的定义及构成 xff1a lt 1 gt 通过查看官方提供的Launcher源码可以知道其实Launcher也是一个Ac
  • 在Java中,return null 是否安全, 为什么?

    Java代码中return value 为null 是不是在任何情况下都可以 xff0c 为什么不会throw NullPointerException Java语言层面 xff1a null值自身是不会引起任何问题的 它安安静静的待在某个
  • 有一个文科女友是一场怎样的体验?

    1 我是一枚标准的工科男 xff0c 毕业后变成了加班狗程序猿 xff0c 我的女朋友是一枚标准的文科妹子 xff0c 这里姑且叫她miss梁吧 xff0c 我觉得以她的智商来看 xff0c 她应该是单细胞动物 xff0c 但是不知道她是怎
  • activity的startActivity和context的startActivity区别

    我们以 startActivity Intent 这个最常用的 api 来讲 1 首先 xff0c Context 类有一个 abstract 方法 Same as 64 link startActivity Intent Bundle w
  • android平台下移动DM接入流程?

    中国移动拟建设终端管理与服务系统 通过对终端产品的激活 配置使用等信息的收集 结合终端公司对产品的供应链管理 实现产品全生命周期的掌控 要求2017年3月起 所有入中国移动产品库的定制 非定制Android终端均要支持终端管理功能 必选要求
  • C++经典面试题(九)

    最近看一些面试题 xff0c 觉得如果自己被问到了 xff0c 并不能很利落的回答出来 一是从来没有这个意识 xff0c 二是没有认真的梳理下 下面对这些题做出分析 xff0c 哈 xff01 个人能力有限 xff0c 其中难免有疏漏 xf
  • 我的大学——学习生活总结

    纪念我终将逝去的青春 大一上學期 專業 1 C語言K amp R amp amp 習題 2 C語言經典習題 3 C語言趣味習題 4 C陷阱与缺陷 5 彙編語言 6 C 43 43 程序設計 7 C 程序設計
  • latex论文作图(python+matplotlib)

    20210425 0 引言 论文中进行作图 xff0c 需要对图片中的各种元素进行控制 xff0c 最近在论文写作过程中为了能够得到匹配文章的高质量图片 xff0c 也是花了很多心血 除了对图片中的风格进行控制 xff0c 另一方面比较重要