1.axes subplot axis

先说第一个疑惑 Axes - Subplot - Axis 之间到底是个什么关系?

因为我是努力在看英文的教程,所以刚开始对axes和axis是基本搞不清的,一个是轴的复数,一个是轴,好像设定图像属性的时候经常用axes,具体到某个坐标轴的时候才会用axis。然后教程还说,subplot和axes基本就是一个意思。真是坑坑坑。。。

扛不住,翻了翻中文教程,好像有的教程就直接把axes翻译成子图了,好像这个世界就压根没有subplot和axes的区别。。看了半天,其实我还是觉得axes翻译成轴域比较贴切,下面就结合后来看到的各种教程来讲讲自己最后的理解。

1.1 先明确Figure的概念

import numpy as np

import matplotlib.pyplot as plt

fig = plt.figure()

plt.show()

我们先理清figure的概念。用画板和画纸来做比喻的话,figure就好像是画板,是画纸的载体,但是具体画画等操作是在画纸上完成的。在pyplot中,画纸的概念对应的就是Axes/Subplot。

fig = plt.figure()

ax = fig.add_subplot(111)

ax.set(xlim=[0.5, 4.5], ylim=[-2, 8], title='An Example Axes', ylabel='Y-Axis', xlabel='X-Axis')

plt.show()

所以就算我们只有一个子图,我们也可以生成一个subplot,然后来在对这个subplot对象进行各种轴、标注、刻度等的设定。

1.2 Axes 和 Subplot 的概念上细微的区别

fig = plt.figure()

ax1 = fig.add_subplot(211)

ax2 = fig.add_subplot(212)

print type(ax1)

plt.show()

第一个例子是用subplot()方法。

subplot()方法很好理解。里面传入的三个数字,前两个数字代表要生成几行几列的子图矩阵,底单个数字代表选中的子图位置。这个例子中我们生成了2行1列的子图矩阵。可以分别在两个subplot中画图。

fig = plt.figure()

ax3 = fig.add_axes([0.1, 0.1, 0.8, 0.8])

ax4 = fig.add_axes([0.72, 0.72, 0.16, 0.16])

print type(ax3) plt.show()

第二个例子是用add_axes()方法。

我觉得轴域(Axes)的感念确实可以先理解成一些轴(Axis)的集合,当然这个集合还有很多轴(Axis)的属性,标注等等。我们用add_axes()方法生成一个轴域(Axes),括号里面的值前两个是轴域原点坐标(从左下角计算的),后两个是显示坐标轴的长度。当我们生成了轴域的时候,从结果上看确实是生成了一个可以画图的子图。我们可以分别在两个轴域(Axes)中画图。

对比两种方法,两种对象,我们可以总结总结:两种对象确实是“你中有我,我中有你”的关系,生成子图(subplot)的时候,必然带着所谓的一套轴域(Axes)。而用轴域(Axes)方法,客观上就是生成了一个可以画图的子图。

add_subplot()方法在生成子图过程,简单明了,而用add_axes()方法,则生成子图的灵活性更强,完全可以实现add_subplot()方法的功能,可以控制子图显示位置,甚至实现相互重叠的效果。例如:

2 Axes方法与pyplot函数

用野路子法,也就是直接看代码,不懂的就查文档,看别人的代码的时候,图像的的各种特性经常用两套方法实现,对学习过真是毁灭性打击。所以遇到模仿的瓶颈的时候,还是要找些教程看看。这里基本照搬翻译,https://github.com/matplotlib/AnatomyOfMatplotlib 教程中的Part1的 Axes methods vs. pyplot 一节。

plt.plot([1, 2, 3, 4], [10, 20, 25, 30], color='lightblue', linewidth=3)

plt.xlim(0.5, 4.5)

plt.show()

fig = plt.figure()

ax = fig.add_subplot(111)

print type(ax)

ax.plot([1, 2, 3, 4], [10, 20, 25, 30], color='lightblue', linewidth=3) ax.set_xlim(0.5, 4.5)

plt.show()

本次画图涉及到的两步操作,画图和设定x轴的显示范围,分别用前后两种方法实现。

第一种,调用了pyplot中的 plot() 函数和 xlim() 函数,

第二种,使用了生成的Subplot对象的两种方法 .plot 和 .set_xlim方法。

实际上,实现整个画图过程可以用两套工具来分别实现,其实这也是贯穿整个python编程的两种思路,函数式编程和对象式编程。我们在这里可以比较一下两套工具的优缺点:以 plot() 为代表的函数式操作,表达简洁,但是没有体现出真正画图的实现过程,例如甚至当没有搞清楚Figure Axes Subplot 等概念的时候,依然可以轻松的用pyplot函数画图。当子图较多的时候,对子图的操作容易陷入混乱,因为从代码上并不能字节观察出到底在操作那张子图。

以 .plot 为代表的对象式操作,表达明确,分步生成 Figure 和 Axes/Subplot,操作过程直接可以看出是在那张子图上操作。但是缺点就是,需要写的代码比较多,不够简洁。

这里要吐槽一下我看的这个教程,作者提出了在 PEP20 中,“Python之道”(The Zen of Python)提到了“明了胜于晦涩”(Explicit is better than implicit),所以作者在整个教程中都是使用了对象式的方法。但是其实”Python之道“的下一句就是“简洁胜于复杂”(Complex is better than complicated)。

所以,还是看你的使用场景,假如不需要画子图的时候,用一用简单的pyplot方法也没什么不好。但是初学者最好还是能够坚持先使用Axes对象属性的方法,这样对于画图的实现过程可以加深理解。

参考资料:

python axes_python matplotlib中axes与axis的区别?相关推荐

  1. python中的matplotlib.pyplot_python matplotlib中axes与axis的区别?

    1.axes subplot axis 先说第一个疑惑 Axes - Subplot - Axis 之间到底是个什么关系? 因为我是努力在看英文的教程,所以刚开始对axes和axis是基本搞不清的,一 ...

  2. python中axes什么意思_python matplotlib中axes与axis的区别是什么?

    1.axes subplot axis 先说第一个疑惑 Axes - Subplot - Axis 之间到底是个什么关系? 因为我是努力在看英文的教程,所以刚开始对axes和axis是基本搞不清的,一 ...

  3. python使用matplotlib中的errorbar函数可视化误差条、并自定义数据点标记、数据点大小、数据点颜色、数据点边缘颜色、误差棒颜色、误差棒线条宽度、误差棒边界线长度、误差棒边界线厚度等

    python使用matplotlib中的errorbar函数可视化误差条.并自定义数据点标记.数据点大小.数据点颜色.数据点边缘颜色.误差棒颜色.误差棒线条宽度.误差棒边界线长度.误差棒边界线厚度等 ...

  4. python动态更新窗口上的图片_基于Python实现matplotlib中动态更新图片(交互式绘图)...

    最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...

  5. python动态绘图并保留之前绘图_[转]基于Python实现matplotlib中动态更新图片(交互式绘图)...

    最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...

  6. Python 用 matplotlib 中的 plot 画图,折线图

    文章目录 1. 加载宏包 2. plot 函数的语法 plot([x], y, [fmt], **kwargs) 3. 一张图画好几条线 1. 加载宏包 使用 matplotlib 包画图时,我们一般 ...

  7. linux python matplotlib 使用,关于Linux:如何在Python的matplotlib中设置“后端”?

    我是matplotlib的新用户,我的平台是Ubuntu 10.04 Python 2.6.5 这是我的代码 import matplotlib matplotlib.use('Agg') impor ...

  8. python 利用matplotlib中imshow()函数绘图

    matplotlib 是python最著名的2D绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中.通过简单的绘图语 ...

  9. python axes_Python Matplotlib.axes.Axes.axis()用法及代码示例

    Matplotlib是Python中的一个库,它是数字的-NumPy库的数学扩展.轴类包含大多数图形元素:Axis,Tick,Line2D,Text,Polygon等,并设置坐标系. Axes实例通过 ...

最新文章

  1. gogs mysql 报错_docker上对gogs二次开发
  2. Linux学习之系统编程篇:fifo
  3. c++派生类的访问控制
  4. NodeMCU学习(三) : 进入网络世界
  5. DIP原则、IoC以及DI
  6. Myeclipse创建第一个web项目
  7. WebService服务发布与使用(JDK自带WebService)
  8. 【汇编语言与计算机系统结构笔记15】子程序设计:调用与返回,保护与恢复寄存器,子程序的参数传递,堆栈平衡,结构伪操作 STRUC
  9. STM32Cubemx出现工程突然自动退出的问题
  10. linux 更新目录时间戳,修改linux 文件的时间戳
  11. HTTP协议之Content-Encoding - 天下无贼 - 51CTO技术博客
  12. C++二进制数转换十进制数
  13. 百度地图语音导航开发
  14. 评分卡Bad rate单调性问题
  15. 数据分析 之 渠道质量分析
  16. sin cos tan c语言,sin cos tan在前端的应用
  17. 注册域名需要提供什么证件?
  18. Dev的安装和简单使用
  19. 打开ftp服务器只显示根目录,FTP能连接成功,但是不显示目录,根目录也没有,根目录都没有,怎么办?别的地方却可以。...
  20. uml 菱形_uml类图符号介绍 | 学步园

热门文章

  1. 200-电影-《The secret life of Walter Mitty》
  2. 【软件】OBS无法捕捉显示屏
  3. 【Python】文件的使用
  4. java根据pdf模版动态生成pdf
  5. 3d正方体旋转相册代码_3d旋转正方体的多种html和css制作方法和相关知识复习讲解
  6. Python3中异常处理和try/except,try/finally的用法
  7. python双端队列及其实现
  8. Flash中与xml交互时不显示中文的解决办法
  9. Div+CSS布局入门教程(三) 页面顶部制作之一
  10. ubuntu 开启ipv6_如何在Ubuntu服务器上重新启用IPv6?