第二章 Matplotlib相关知识 —— 绘图 (二)
上篇主要介绍了Artist的两种类型:primitives
和containers
中的primitives
类型,这次主要是介绍containers
类型
Object container容器会包含一些primitives
,并且容器还有它自身的属性。
比如Axes Artist
,它是一种容器,它包含了很多primitives
,比如Line2D,Text
;同时,它也有自身的属性,比如xscal
,用来控制X轴是linear
还是log
的。
Figure attribute(属性) | Description(描述) |
---|---|
axes | 一个Axes实例的列表(包括Subplot) |
patch | Figure的背景矩形 |
images | 一个FigureImages patch列表 |
legends | 一个Figure Legend实例列表(不同于Axes.legends) |
lines | 一个Line2D实例的列表 |
texts | 一个Figure Text实例列表 |
patches | Patch的列表 |
matplotlib.figure.Figure
是Artist
最顶层的container
对象容器,它包含了图表中的所有元素。一张图表的背景就是在Figure.patch
的一个矩形Rectangle
。
当我们向图表添加Figure.add_subplot()
或者Figure.add_axes()
元素时,这些都会被添加到Figure.axes
列表中。
fig = plt.figure()
ax1 = fig.add_subplot(211) # 作一幅2*1的图,选择第1个子图
# 也可以写作 ax1 = fig.add_subplot(2,1,1)
ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.3]) # 位置参数,四个数分别代表了(left,bottom,width,height)
print(ax1)
print(fig.axes) # fig.axes 中包含了subplot和axes两个实例
通过
Figure.add_subplot()、Figure.add_axes()
来添加元素,通过Figure.delaxes()
来删除元素。
- 可以迭代或者访问
Figure.axes
中的Axes
,然后修改这个Axes
的属性。
fig = plt.figure()
ax1 = fig.add_subplot(211)
for ax in fig.axes:
ax.grid(True)
fig, axs = plt.subplots(3, 1, figsize=(5, 6), tight_layout=True)
row = [1,2,3]
for i,ax in list(zip(row,fig.axes)):
if i == 0:
ax.grid(True)
elif i == 1:
ax.xaxis.grid()
else:
ax.yaxis.grid()
Axes attribute(属性) | Description(描述) |
---|---|
artists | Artist实例列表 |
patch | Axes所在的矩形实例 |
collections | Collection实例 |
images | Axes图像 |
legends | Legend 实例 |
lines | 一个Line2D实例 |
texts | 一个Figure Text实例 |
xaxis | matplotlib.axis.XAxis 实例 |
yaxis | matplotlib.axis.YAxis 实例 |
fig = plt.figure()
ax = fig.add_subplot(111)
rect = ax.patch # axes的patch是一个Rectangle实例
rect.set_facecolor('green')
# plt.figure creates a matplotlib.figure.Figure instance
fig = plt.figure()
rect = fig.patch # a rectangle instance
rect.set_facecolor('lightgoldenrodyellow')
ax1 = fig.add_axes([0.1, 0.3, 0.4, 0.4])
rect = ax1.patch
rect.set_facecolor('lightslategray')
for label in ax1.xaxis.get_ticklabels():
# label is a Text instance
label.set_color('red')
label.set_rotation(45)
label.set_fontsize(16)
for line in ax1.yaxis.get_ticklines():
# line is a Line2D instance
line.set_color('green')
line.set_markersize(25)
line.set_markeredgewidth(3)
plt.show()
matplotlib.axis.Tick
是从Figure
到Axes
到Axis
到Tick
中最末端的容器对象。
Tick
包含了tick、grid line
实例以及对应的label
。
Tick attribute(属性) | Description(描述) |
---|---|
Tick.tick1line | Line2D实例 |
Tick.tick2line | Line2D实例 |
Tick.gridline | Line2D实例 |
Tick.label1 | Text实例 |
Tick.label2 | Text实例 |
import numpy as np
import matplotlib.pyplot as plt
# Fixing random state for reproducibility
np.random.seed(19680801)
fig, ax = plt.subplots()
ax.plot(100*np.random.rand(20))
# Use automatic StrMethodFormatter
ax.yaxis.set_major_formatter('${x:1.2f}')
ax.yaxis.set_tick_params(which='major', labelcolor='green',
labelleft=False, labelright=True)
plt.show()
1.Datawhale数据可视化小组开源项目:《Fantastic-Matplotlib》
2.Matplotlib官方文档