加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

matplotlib绘图库之Artist对象介绍

发布时间:2021-11-12 12:13:34 所属栏目:教程 来源:互联网
导读:Matplotlib是一个面向对象的绘图库,在最终图像上所呈现出来的所有元素,都是一个可以控制的对象,那么如何理解绘图的过程呢?可以简单地类比在画布上画图的过程, 首先大致的绘制流程: 创建Figure对象(相当于在画架上添加画布) 为灭一个Figure对象添加一

Matplotlib是一个面向对象的绘图库,在最终图像上所呈现出来的所有元素,都是一个可以控制的对象,那么如何理解绘图的过程呢?可以简单地类比在画布上画图的过程,
 
首先大致的绘制流程:
 
创建Figure对象(相当于在画架上添加画布)
为灭一个Figure对象添加一个或者多个Axes对象(在某张画布上划分不同的画图区域)
调用Axes对象的方法来创建各种简单类型的Artist对象(在某一个画图区域添加各种具体的元素)
简单来说,最大的Figure中可以包含多个Axes,在每个Axes中,又可以绘制各种基本的图像。
 
具体来看三种层次的主要对象:
 
Figure对象
 
Figure对象,或者说是容器,是最大一层次的对象,就相当于一张画布,包含图像的所有元素,一个Figure对象最后的表现就是一张图像,例如:
 
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.lines import Line2D
fig1 = plt.figure(1)
fig2 = plt.figure(2)
 
plt.show()
 
运行之后,我们可以得到两张空图:
 
matplotlib绘图库之Artist对象详解
 
在Figure中也可以添加简单的Artist对象,比如文字,线条等,例如添加两条线:
 
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.lines import Line2D
 
fig1 = plt.figure()
line1 = Line2D([1, 0], [1, 0], transform=fig1.transFigure, figure=fig1, color='r')
line2 = Line2D([1, 0], [0, 1], transform=fig1.transFigure, figure=fig1, color='g')
 
fig1.lines.extend([line1, line2])
 
plt.show()
 
matplotlib绘图库之Artist对象详解
 
一般情况下,我们不会在Figure中绘制这样的图像,这样一张图只能绘制一组图像,所以就用到了Axes对象来添加子图。
Axes对象
Axes,称之为子图,可以这样理解,在绘制漫画的时候,一张画布上有很多格子,不同的格子内容可以独立绘制,这里的格子就是Axes对象。
在某张Figure中添加子图的时候有两种常用方式:
 
figure.add_axes()
figure.add_subplot()
 
简单例子:
 
ax1 = fig1.add_subplot(221)
ax2 = fig1.add_subplot(224)
 
 
效果如下:
 
matplotlib绘图库之Artist对象详解
 
ax3 = fig2.add_axes([0.2, 0.2, 0.6, 0.4])
ax4 = fig2.add_axes([0.2, 0.7, 0.6, 0.2])
 
效果如下:
 
matplotlib绘图库之Artist对象详解
 
这里的函数传入四个参数,分别指定了左边距,下边距,宽度和高度,都是小于1 的数字,其实就相当于等比例划分,大致估计一下宽度和高度就可以看出来。
其实这两个方法创建的对象还是有点区别的,add_subplot() 函数创建的对象是SubplotAxes, 另一个则是Axes对象,SubplotAxes是Axes的派生类。
下面这个例子中说明一些dui子图对象属性的设置方法,对于所有的对象都可以使用这两种方式:
 
import matplotlib.pyplot as plt
import numpy as np
 
fig1 = plt.figure()
 
# 可以设置多个属性的值
ax1 = fig1.add_subplot(221)
ax1.set(facecolor='lightgreen', title='Axes 1')
 
# 分别设置每种属性
ax2 = fig1.add_subplot(224)
ax2.set_facecolor('lightblue')
ax2.set_title('Axes 2')
 
plt.show()
 
效果如下:
 
matplotlib绘图库之Artist对象详解
 
有了每个格子,那么最后一步就是每一个格子中的内容了。
曲线等简单Artist对象
绘制好了格子,那么添加的曲线,刻度等都是最后一层的内容了,例如,在不同Axes中绘制图像,在上面的代码中添加:
 
x = np.linspace(-np.pi, np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
 
ax1.plot(x, y1)  # 在ax1子图中绘制
ax2.plot(x, y2)  # 在 ax2子图中绘制
 
matplotlib绘图库之Artist对象详解
 
同样,每条曲线,或者每个坐标轴都是一个对象,例如,获取曲线对象,如对它的属性进行设置,同样设置的方式有两种,分别是集中设置或者分散设置:
 
line1 = ax1.plot(x, y1)[0]  # 注意 获取曲线对象的方式返回的是一个list,所以注明是第一个元素
line1.set_color('red')
line1.set_linewidth(5)
 
line2 = ax2.plot(x, y2)[0]
line2.set(color='blue', linewidth=2)
 
效果:
 
matplotlib绘图库之Artist对象详解
 
上面演示的Line对象,还有像Axis对象,控制的是坐标轴,包括对刻度等等进行设置,原理是一样的。
 
import matplotlib.pyplot as plt
import numpy as np
 
fig1 = plt.figure()
 
# 可以设置多个属性的值
ax1 = fig1.add_subplot(221)
ax1.set(facecolor='lightgreen', title='Axes 1')
 
# 分别设置每种属性
ax2 = fig1.add_subplot(224)
ax2.set_facecolor('lightblue')
ax2.set_title('Axes 2')
 
x = np.linspace(-np.pi, np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
 
ax1.plot(x, y1)  # 在ax1子图中绘制
ax2.plot(x, y2)  # 在 ax2子图中绘制
 
line1 = ax1.plot(x, y1)[0]  # 注意 获取曲线对象的方式返回的是一个list,所以注明是第一个元素
line1.set_color('red')
line1.set_linewidth(5)
 
line2 = ax2.plot(x, y2)[0]
line2.set(color='blue', linewidth=2)
 
plt.show()
 
基本就这样。

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读