详细的参考链接:更详细的:https://www.cnblogs.com/zhizhan/p/5615947.html

图像、子图、坐标轴以及记号

Matplotlib中图像的意思是打开的整个画图窗口,【图像】里有所谓的【子图】,子图的位置是有坐标网格确定的,而【坐标轴】的位置却不受任何限制,可以放在图像中的任何位置

上篇中是使用隐式的方法来绘制图像以及坐标轴,当我们使用plot()时,matplotlib调用gca()函数以及gcf()函数获取当前的坐标轴和图像,如果获取不到图像,则会调用figure函数来创建一个--准确来说,是使用subplot(1,1,1,)创建一个只用一个子图的图像。在快速绘图中,这样是很方便的,我们也可以显示的控制图像、子图、坐标轴及记号。

图像

  当我们运行程序,会打开一个以figure*命名的窗口,这一整个窗口就是【图像】,图像的编号从1开始,和MATLAB的风格保持一致,不与Python从0开始编号的风格。

参数 默认值 描述
num 1 图像的数量
figsize figure.figsize 图像的长和宽(英寸)
dpi figure.dpi 分辨率(点/英寸)
facecolor figure.facecolor 绘图区域的背景颜色
edgecolor figure.edgecolor 绘图区域边缘的颜色
frameon True 是否绘制图像边缘

我们可以在源文件中指明这些默认值,不过一般除了图像数量这个参数,其他一般很少修改。

可以使用close()这个命令关闭图像,这个图像有几个可选参数

  1. close()#关闭当前窗口
  2. close()#传入当前实例或者图像编号关闭指定窗口
  3. closeall)关闭全部窗口  

  使用如下语句,关闭失败

  1. #plt.draw()
  2. plt.show()
  3. time.sleep(1)
  4. plt.close('all')

  

(不理解),和其他对象一样,你也可以使用setp或者set_something来设置图像的属性

子图

  你可以使用【子图】来将图样(plot)放置在均匀的坐标网格中,使用subplot函数,需要指明网格的行列数量,以及你需要将【图样】放置在哪一个区域中。另外还可以使用功能同样强大的gridspec()来实现同样的功能。

  使用subplot绘制没有嵌套的网格:

  1. #绘制3行4列一共12个网格,按照先从左到右,后从上到下的顺序,左上角为1,右下角为12
  2. plt.subplot(3,4,3)#将图样放在第三个中

  

  使用gridspec()绘制嵌套坐标网格

  1. from pylab import *
  2. import matplotlib.gridspec as gridspec
  3.  
  4. G = gridspec.GridSpec(3, 3)
  5.  
  6. axes_1 = subplot(G[0, :])
  7. xticks([]), yticks([])
  8. text(0.5,0.5, 'Axes 1',ha='center',va='center',size=24,alpha=.5)
  9.  
  10. axes_2 = subplot(G[1,:-1])
  11. xticks([]), yticks([])
  12. text(0.5,0.5, 'Axes 2',ha='center',va='center',size=24,alpha=.5)
  13.  
  14. axes_3 = subplot(G[1:, -1])
  15. xticks([]), yticks([])
  16. text(0.5,0.5, 'Axes 3',ha='center',va='center',size=24,alpha=.5)
  17.  
  18. axes_4 = subplot(G[-1,0])
  19. xticks([]), yticks([])
  20. text(0.5,0.5, 'Axes 4',ha='center',va='center',size=24,alpha=.5)
  21.  
  22. axes_5 = subplot(G[-1,-2])
  23. xticks([]), yticks([])
  24. text(0.5,0.5, 'Axes 5',ha='center',va='center',size=24,alpha=.5)
  25.  
  26. #plt.savefig('../figures/gridspec.png', dpi=64)
  27. show()

  效果:

坐标轴axes

  我们先来看什么是Figure和Axes对象。在matplotlib中,整个图像为一个Figure对象。在Figure对象中可以包含一个,或者多个Axes对象。每个Axes对象都是一个拥有自己坐标系统的绘图区域。其逻辑关系如下:

  其中Axis是确定坐标范围的:

  1. plt.axis([xmin, xmax, ymin, ymax])
  2. 上面例子里的axis()命令给定了坐标范围。

  axes的官方文档:

  • axes() by itself creates a default full subplot(111) window axis.(axes()会单独创建一个默认的窗口)
  • axes(rect, axisbg=’w’) where rect = [left, bottom, width, height] in normalized (0, 1) units. axisbg is the background color for the axis, default white.(其中rect=[left,bottom,width,height]是标量范围为0-1,,axisbgsi 这个axis的背景色)
  • axes(h) where h is an axes instance makes h the current axis. An Axes instance is returned.(返回一个Axes实例,其中的h是当前axis?)

rect=[左, 下, 宽, 高] 规定的矩形区域,rect矩形简写,这里的数值都是以figure大小为比例,因此,若是要两个axes并排显示,那么axes[2]的左=axes[1].左+axes[1].宽,这样axes[2]才不会和axes[1]重叠。

  这个坐标轴的意思并不是坐标系中的那个坐标轴,而是一种防止图样位置的一种定位方式,坐标轴表示的定位可以放在图像的任何位置,如果你想要在一副大图中添加一副小图,就可以使用这样的方法。

  1. import matplotlib.pyplot as plt
  2.  
  3. plt.axes([0.1,0.1,.8,.8])
  4. plt.xticks([]), plt.yticks([])
  5. plt.text(0.6,0.6, 'axes([0.1,0.1,.8,.8])',ha='center',va='center',size=20,alpha=.5)
  6.  
  7. axes([0.2,0.2,.3,.3])
  8. xticks([]), yticks([])
  9. text(0.5,0.5, 'axes([0.2,0.2,.3,.3])',ha='center',va='center',size=16,alpha=.5)
  10.  
  11. plt.savefig("../figures/axes.png",dpi=64)
  12. show()

  效果:

  1. plt.axes([0,0,1,1])
  2. #plt.axes([a,b,c,d])四个都是标量,0-1
  3. #a代表图像左边与窗口边缘的距离为窗口宽的a倍
  4. #b-----上边
  5. #c宽度
  6. #d高度为窗口高的d倍

  

记号

  matplotlib中记号中的各个细节都是可以由用户自己配置的。Ticks Locators指定在哪些位置放置记号、Ticks Formatters来调整记号的样式。主要的记号和次要的记号可以以不同的方式来显示、默认情况下、每个记号都是隐藏的、也就是说默认情况下、次要记号的列表都是空的 NullLocator

Tick Locators

下面有为不同需求设计的一些 Locators。

类型 说明
NullLocator No ticks.
IndexLocator Place a tick on every multiple of some base number of points plotted. 
FixedLocator Tick locations are fixed. 
LinearLocator Determine the tick locations. 
MultipleLocator Set a tick on every integer that is multiple of some base. 
AutoLocator Select no more than n intervals at nice locations. 
LogLocator Determine the tick locations for log axes. 

这些 Locators 都是 matplotlib.ticker.Locator 的子类,你可以据此定义自己的 Locator。以日期为 ticks 特别复杂,因此 Matplotlib 提供了 matplotlib.dates 来实现这一功能。

  

Python 绘图与可视化 matplotlib(下)的更多相关文章

  1. Python 绘图与可视化 matplotlib(上)

    参考链接:https://www.cnblogs.com/dudududu/p/9149762.html 更详细的:https://www.cnblogs.com/zhizhan/p/5615947. ...

  2. Python 绘图与可视化 matplotlib 制作Gif动图

    参考链接:https://blog.csdn.net/theonegis/article/details/51037850 官方文档:https://matplotlib.org/3.1.0/api/ ...

  3. Python 绘图与可视化 matplotlib 动态条形图 bar

    bar的参考链接:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.bar.html 第一种办法 一种方法是每次都重新画,包括清除f ...

  4. Python 绘图与可视化 matplotlib text 与transform

    Text 为plots添加文本或者公式,反正就是添加文本了 参考链接:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.text.html#ma ...

  5. Python 绘图与可视化 matplotlib 散点图、numpy模块的random()

    效果: 代码: def scatter_curve(): # plt.subplot(1,1,1) n=1024 X=np.random.normal(0,1,n) Y=np.random.norma ...

  6. Python 绘图与可视化 matplotlib 填充fill和fill_between

    参考链接:https://blog.csdn.net/You_are_my_dream/article/details/53457960 fill()填充函数曲线与坐标轴之间的区域: x = np.l ...

  7. Python绘图与可视化

    Python有很多可视化工具,本篇只介绍Matplotlib. Matplotlib是一种2D的绘图库,它可以支持硬拷贝和跨系统的交互,它可以在Python脚本.IPython的交互环境下.Web应用 ...

  8. IPython绘图和可视化---matplotlib 入门

    最近总是需要用matplotlib绘制一些图,由于是新手,所以总是需要去翻书来找怎么用,即使刚用过的,也总是忘.所以,想写一个入门的教程,一方面帮助我自己熟悉这些函数,另一方面有比我还小白的新手可以借 ...

  9. Python 绘图与可视化 seaborn

    Seaborn是一个基于matplotlib的Python数据可视化库.它提供了一个高级界面,用于绘制有吸引力且信息丰富的统计图形. 主页:http://seaborn.pydata.org/ 官方教 ...

随机推荐

  1. jenkins 打包 springboot

    遇到的坑 jdk maven  可以自己配置 也可以让jenkins生成 jenkins创建的项目打的包在  /var/lib/jenkins/jobs/ 需要手动去下载pom中的jar  吧pom复 ...

  2. 正确判断js数据类型 总结记录

    正确判断js数据类型 总结记录 判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. 三方库. js六大数据类型 number: 数 ...

  3. L - 还是畅通工程

    L - 还是畅通工程   思路:水! #include<cstdio> #include<cstring> #include<iostream> #include& ...

  4. JavaScript替换字符串中最后一个字符

    1.问题背景 在一个输入框中,限制字符串长度为12位.利用键盘输入一个数字,会将字符串中最后一位替换,比方:111111111111.再输入一个3,会显示111111111113 2.详细实现 < ...

  5. OpenFace Docker 使用简介

    在Docker中使用openface最大的问题是数据与主机的交互,下面我介绍几种方法来实现主机与Docker容器的数据交互. 1.第一种也是最方便的一种方法是在进入容器时使用-v参数将主机的目录挂载到 ...

  6. poj 3356

    Description Let x and y be two strings over some finite alphabet A. We would like to transform x int ...

  7. Linux系统编程——多线程实现多任务

    概述 每一个进程都拥有自己的数据段.代码段和堆栈段.这就造成进程在进行创建.切换.撤销操作时,须要较大的系统开销. 为了降低系统开销,从进程中演化出了线程.为了让进程完毕一定的工作.进程必须至少包括一 ...

  8. Spring Batch(4): Job详解

    Spring Batch(4): Job详解 2016-03-26 18:46 870人阅读 评论(1) 收藏 举报  分类: Spring(6)  版权声明:本文为博主原创文章,未经博主允许不得转载 ...

  9. UVA 11346 - Probability 数学积分

    Consider rectangular coordinate system and point L(X, Y ) which is randomly chosen among all pointsi ...

  10. [jzoj 6101] [GDOI2019模拟2019.4.2] Path 解题报告 (期望)

    题目链接: https://jzoj.net/senior/#main/show/6101 题目: 题解: 设$f_i$表示从节点$i$到节点$n$的期望时间,$f_n=0$ 最优策略就是如果从$i, ...