设为首页 加入收藏

TOP

matplotlib绘图库之Artist对象详解
2019-03-21 22:08:20 】 浏览:79
Tags:matplotlib 图库 Artist 对象 详解

Matplotlib是一个面向对象的绘图库,在最终图像上所呈现出来的所有元素,都是一个可以控制的对象,那么如何理解绘图的过程呢?可以简单地类比在画布上画图的过程,


首先大致的绘制流程:


简单来说,最大的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()


基本就这样。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇二叉排序树输出父节点值 下一篇Python与C++引用不同的理解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目