python中的matplotlib.pyplot_python matplotlib中axes与axis的区别?
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中的matplotlib.pyplot_python matplotlib中axes与axis的区别?相关推荐
- python axes_python matplotlib中axes与axis的区别?
1.axes subplot axis 先说第一个疑惑 Axes - Subplot - Axis 之间到底是个什么关系? 因为我是努力在看英文的教程,所以刚开始对axes和axis是基本搞不清的,一 ...
- python中的matplotlib.pyplot_Python matplotlib简介 Pyplot教程
matplotlib.pyplot是一些命令行风格函数的集合,使matplotlib以类似于MATLAB的方式工作.每个pyplot函数对一幅图片(figure)做一些改动:比如创建新图片,在图片创建 ...
- python中axes什么意思_python matplotlib中axes与axis的区别是什么?
1.axes subplot axis 先说第一个疑惑 Axes - Subplot - Axis 之间到底是个什么关系? 因为我是努力在看英文的教程,所以刚开始对axes和axis是基本搞不清的,一 ...
- python文件式和交互式道路标志_其它课程中的python---4、Matplotlib最最最最简单使用...
其它课程中的python---4.Matplotlib最最最最简单使用 一.总结 一句话总结: 慢慢来吧,不着急,心态平和和沉稳:每次和世界交互,你就能感受到无比的自信 1.如何区别python2和p ...
- python使用matplotlib可视化线图(line plot)、使用arrow函数在matplotlib可视化图像中添加箭头(drawing arrows in matplotlib)
python使用matplotlib可视化线图(line plot).使用arrow函数在matplotlib可视化图像中添加箭头(drawing arrows in matplotlib) 目录
- python matplotlib.pyplot.scatter() 中的cmap参数是什么意思?
根据官方文档, cmap就是指matplotlib.colors.Colormap: 那么matplotlib.colors.Colormap又是什么? colormap又叫colorbar是一个包含 ...
- python实时绘制动态曲线_pyqt中使用matplotlib绘制动态曲线
一.项目背景: 看了matplotlib for python developers这本书,基本掌握了在pyqt中显示曲线的做法,于是自己写一个. 二.需求描述: 1)X轴显示时间点,显示长度为1分钟 ...
- python 散点图 不同颜色_在matplotlib散点图中为每个系列设置不同的颜色
在matplotlib中使用不同颜色的点绘制绘图的常规方法是将颜色列表作为参数传递. 例如:import matplotlib.pyplot matplotlib.pyplot.scatter([1, ...
- python 散点图 不同颜色_在matplotlib上的散点图中为每个系列设置不同的颜色
在matplotlib中用不同颜色的点绘制图的正常方法是传递颜色列表作为参数. 例如: import matplotlib.pyplot matplotlib.pyplot.scatter([1,2, ...
最新文章
- 设计模式 之美 -- 原型模式
- Oracle笔记 七、PL/SQL 异常处理
- 指针变量和引用变量的区别_指针Ⅰ--变量的定义
- 容斥原理(二进制枚举)
- 用redis实现消息队列(实时消费+ack机制)【转】
- windows 搭建python 虚拟环境 写程序_Sublime下配置python编译环境及搭建虚拟环境:(windows下大致相同)...
- 女孩子应该养成的好习惯
- Cookie、Session、Token
- #语音信号处理基础(十一)——梅尔倒谱系数的提取
- ContentProvider实现流程
- sw槽钢插件_SolidWorks所有实用插件详解一览
- 为什么肯德基和麦当劳总是开在一起?
- 以太网芯片mac/phy的关系
- tof 相机的数据读取,depth data和amplitude data以及3D数据
- 7-42 大炮打蚊子 (15 分)
- IT培训与超级实习生怎么选呢?都是1W+费用
- CATalyst——针对末级缓存侧信道攻击的防御技术
- MS17-010漏洞复现(x32)以及分析
- 解决电脑自动修复蓝屏问题(你的电脑未正确启动)
- 物体监测:Sliding Window