matplotlib 中设置图形大小的语句如下:

 fig = plt.figure(figsize=(a, b), dpi=dpi)

其中:

  • figsize 设置图形的大小,a 为图形的宽, b 为图形的高,单位为英寸
  • dpi 为设置图形每英寸的点数

则此时图形的像素为:

px, py = a*dpi, b*dpi  # pixels
# e.g.
# 6.4 inches * 100 dpi = 640 pixels

也就是说,同一像素尺寸的图形(比如 1200 * 600)可以有任意种不同的组合,比如:

figsize=(15,7.5), dpi= 80
figsize=(12,6) , dpi=100
figsize=( 8,4) , dpi=150
figsize=( 6,3) , dpi=200
etc.

但这些不同的组合,有什么区别呢?这取决于图中元素的大小。

线条,标记,文本等大多数元素都有以磅为单位的大小。Matplotlib 中 每英寸点数(ppi)为72,则宽度为 1 点的线将为 1/72 英寸宽,使用 fontsize 12 点的文本将是 12/72 寸高。

为了便于说明,用 matplotlib绘制相应的图形,如 表1 所示。

如果以英寸为单位更改图形大小,而 dpi 不变,较大的图形仍具有相同的元素大小。因此,改变图形尺寸就像拿一张不同尺寸的纸张一样,这样做当然不会改变用同一笔绘制的线条的宽度。通过表 1 中的图形2, 4, 6 的对比,可以明显的看出来这一点。

另一方面,更改dpi会缩放元素。在72 dpi时,1 宽度的线是 1 像素。在144 dpi时,这条线就是 2 像素。因此,更大的dpi就像放大镜一样。所有元素都通过镜头的放大倍数进行缩放。 通过表 1 中的图形 1 3 5 的对比,可以看出这一点。

综上:

  • 图形尺寸(figsize)确定图形的大小(以英寸为单位)。 这给出了轴(和其他元素)在图中的空间量。 较大的图形尺寸将允许显示更长的文本,更多的轴或更多的标记标签(表1中图形3与图形4,图形5与图形6的对比可看出,像素尺寸相同时,图形尺寸越大,所能容纳的内容越多)。
  • dpi 确定了图形每英寸包含的像素数,图形尺寸相同的情况下, dpi 越高,则图像的清晰度越高(表1中 1,3,5 对比可看出)
表1 

 

 

 

 

 5

 

6

易混乱的点

由表 1 中的 1,3,5 对比可看出,明明是相同尺寸的图片,可显示出来大小却差异极大,是不是说明 figsize 的设置根本没用?

这主要是因为图形在屏幕中的显示是以像表为基准的,像素点越高,尺寸看起来也就越大。表 1 中的 1,3,5,其 尺寸相同, dpi 越大,则像素也就越大,因此图形整个看起来也就越大。

为了验证这个问题,可以将上述 6 个图形插入到 word 中,如下图所示。从图中可看出,figsize 相同的图形,其大小相同,只不过 dpi 越高,图像越清晰。也就是说 figsize 的设置可以在打印或者排版时发挥作用。

最后,附上画图的相关代码供参考:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/1/27 14:47
# @Author : 木子识时务
# @Site :
# @File : 图形尺寸设置
# @Software: PyCharm import matplotlib.pyplot as plt def plot(fs, dpi_set):
plt.figure(figsize=fs, dpi=dpi_set)
plt.title("size:{}, dpi:{}".format(fs, dpi))
plt.plot([0, 1, 2, 3], [3, 4, 2, 5])
plt.savefig(str(fs) + "-" + str(dpi_set) + ".png") if __name__ == "__main__":
figsize = (2, 2)
for i in range(1, 4):
plot(figsize, i*72) for i in [2, 4, 6]:
plot((i, i), 72)

画图程序

matplotlib 设置图形大小时 figsize 与 dpi 的关系的更多相关文章

  1. PyQt通过resize改变窗体大小时ListWidget显示异常

    前几天开始的pygame音乐播放器Doco,做的差不多了,上午做到了歌词显示和搜索页面.遇到bug,即通过resize改变ui大小时ListWidget显示异常 #目的: 增加一部分窗口用来显示歌词和 ...

  2. 1025InnoDB log file 设置多大合适

    转自 http://blog.csdn.net/langkeziju/article/details/51094289 数据库的东西,往往一个参数就牵涉N多知识点.所以简单的说一下.大家都知道inno ...

  3. InnoDB log file 设置多大合适?

    简介: 数据库的东西,往往一个参数就牵涉N多知识点.所以简单的说一下.大家都知道innodb是支持事务的存储引擎.事务的四个特性ACID即原子性(atomicity),一致性(consistency) ...

  4. 排查在 Azure 中创建、重启 Windows VM 或调整其大小时发生的分配失败

    创建 VM.重新启动已停止(解除分配)的 VM 和重设 VM 大小时,Azure 会为订阅分配计算资源. 执行这些操作时,即使尚未达到 Azure 订阅限制,也可能偶尔收到错误. 本文说明一些常见分配 ...

  5. 排查在 Azure 中创建、重启 Linux VM 或调整其大小时发生的分配故障

    创建 VM.重启已停止(解除分配)的 VM 和重设 VM 大小时,Azure 会为订阅分配计算资源. 执行这些操作时,即使尚未达到 Azure 订阅限制,也可能偶尔收到错误. 本文说明一些常见分配故障 ...

  6. 十分钟快速学会Matplotlib基本图形操作

    在学习Python的各种工具包的时候,看网上的各种教程总是感觉各种方法很多很杂,参数的种类和个数也十分的多,理解起来需要花费不少的时间. 所以我在这里通过几个例子,对方法和每个参数都进行详细的解释,这 ...

  7. Allegro设置十字大光标

    使用大十字光标,在摆放元器件时,容易对齐.在allegro中,可以通过设置实现大十字光标,其具体方法如下: 1.选择Setup->User Perferences,即可出现如下图所示界面: 2. ...

  8. openGL-计算机图形大作业中出现的几个错误及解决

    错误一 错误现象:按动相应按键i和o无法在x轴和y轴移动camera,但按相应按键p可以在z轴移动camera. 错误原因:为了移动camera,设置了三个全局变量x.y.z,用于gluLookAt( ...

  9. Es 中一个分片一般设置多大

    百度Elasticsearch-产品描述-介绍-百度云 https://cloud.baidu.com/doc/BES/FAQ.html#.2C.BB.93.08.C9.7E.2F.A3.E7.35. ...

随机推荐

  1. atom通过remote ftp同步本地文件到远程主机的方法

    视频教程:https://ninghao.net/video/3991 搜索 “remote ftp”, 点击 “Package”搜索包,Install”安装 本地打开需要同步的项目目录 创建 rem ...

  2. 如何更改Android的默认虚拟机地址(Android virtual driver路径设置)

    1.将其他目录下的.android复制到C:\Documents and Settings\Administrator路径下(具体的用户名看自己的).然后进入.android\avd打开avd.ini ...

  3. swift基础-2

    一.基本运算符 let a = 5 var b = 10 b = a if a = b{ swift 中赋值运算符,并不将自身作为一个值进行返回,所以编译不合法,帮开发者避免错误,很人性化的语言 } ...

  4. 学JS的书籍

    1.JavaScript DOM 编程艺术 [说明] 这本书最大的特点就是简明易懂,循序渐进,适合初学者,非常容易上手. 计划:三天读完 读书总结:待写 2.Javascript权威指南 特点是权威. ...

  5. 系统有问题基本出在数据库上,web层无状态

    系统有问题基本出在数据库上,web层无状态.

  6. iOS Automated Tests with UIAutomation

    参照:http://blog.manbolo.com/2012/04/08/ios-automated-tests-with-uiautomation#1 UI Automation JavaScri ...

  7. LeetCode Remove Linked List Elements 删除链表元素

    题意:移除链表中元素值为val的全部元素. 思路:算法复杂度肯定是O(n),那么就在追求更少代码和更少额外操作.我做不出来. /** * Definition for singly-linked li ...

  8. HDU 4738 Caocao's Bridges taijan (求割边,神坑)

    神坑题.这题的坑点有1.判断连通,2.有重边,3.至少要有一个人背*** 因为有重边,tarjan的时候不能用子结点和父节点来判断是不是树边的二次访问,所以我的采用用前向星存边编号的奇偶性关系,用^1 ...

  9. android上部署tensorflow

    https://www.jianshu.com/p/ddeb0400452f 按照这个博客就可以 https://github.com/CrystalChen1017/TSFOnAndroid 这个博 ...

  10. C++类和结构体的区别

    C++类和结构体的区别? 结构体默认数据访问控制是public; 类默认数据访问控制是private;