最后一次更新日期: 2019/4/20
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。
按需导入以下模块:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
1. 注解annotate
fig=plt.figure(figsize=(10,3.5))
ax=fig.add_subplot(121,title='annotate')
ax.scatter([-0.25],[-0.25],s=100)
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
bbox_style = dict(boxstyle="square", fc='white', ec='black',lw=1)
arrow_style = dict(arrowstyle='->',color='black',lw=2)
ax.annotate('This is a dot.',(-0.24,-0.24),(-0.14,0.16),
arrowprops=arrow_style,bbox=bbox_style,fontsize=15)
ax=fig.add_subplot(122,title='arrow+text')
ax.scatter([-0.25],[-0.25],s=100)
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.arrow(0.09,0.06,-0.25,-0.23,fc='k',ec='k',
width=0.01,head_width=0.07,head_length=0.07)
ax.text(-0.14,0.16,'This is a dot.',fontsize=15,bbox=bbox_style)
annotate
方法用于向图像上添加注解:
第一个参数
s
设置注释的文本;
第二个参数
xy
设置要注释的点位置,tuple
类型表示的坐标;
第三个参数
xytext
设置注释文本的位置,tuple
类型表示的坐标;
参数
xycoords
和textcoords
设置注释点位置和文本位置所采用的坐标系,默认'data'
和数据的坐标系一致;
参数
arrowprops
设置箭头,dict
类型,其中arrowstyle
属性设置样式,color
属性设置颜色,lw
属性设置箭头宽度;
以上三个参数具体信息建议参考官方文档-annotate;
参数
bbox
设置文本框样式,dict
类型,其中boxstyle
属性设置样式,fc
属性设置填充颜色,ec
属性设置边缘颜色,lw
属性设置边缘线宽度;
bbox
中的详细设置建议参考官方文档-Rectangle;
参数
fontsize
设置字体大小。
注解也可通过arrow
+text
实现。
arrow
方法用于添加箭头:
第1,2个参数x
,y
设置箭头的起始位置;
第3,4个参数dx
,dy
设置箭头往xy方向延伸的长度;
fc
参数设置填充颜色;ec
参数设置边缘颜色;
width
参数设置箭头线宽度;
head_width
参数设置箭头头部的宽度;
head_length
参数设置箭头头部的长度。
text
方法用于添加文本:
第1,2个参数x
,y
设置文本的位置;
第3个参数s
设置要显示的文本;
参数fontsize
设置字体大小;
参数bbox
设置文本框样式,与annotate
相同。
arrow
绘制的箭头在有所倾斜时无法保证头部的底部与线垂直,对此有要求只能使用annotate
。
2. 区域填充fill
x=np.arange(0,720,1)
y1=np.sin(x*np.pi/180)
y2=np.cos(x*np.pi/180)
fig=plt.figure(figsize=(10,3.5))
ax=fig.add_subplot(121,title='fill')
ax.plot(x,y1)
ax.plot(x,y2)
ax.fill(x,y1,color='g',alpha=0.3)
ax.fill(x,y2,color='b',alpha=0.3)
ax=fig.add_subplot(122,title='fill between')
ax.plot(x,y1)
ax.plot(x,y2)
ax.fill_between(x,y1,y2,color='g',alpha=0.3)
fill
方法用于填充多边形:
第1,2个参数
x
,y
设置边的xy坐标,该绘图方法不适合填充不封闭的曲线,会如上图出现无法预估的绘制效果。
fill_between
方法用于填充两条曲线中间的区域:
第1,2,3个参数x
,y1
,y2
设置x坐标和两条曲线的y坐标;
第4个参数where
设置绘制的横坐标范围,布尔数组类型,相当于对前三个参数执行索引筛选。
3. 图片image
from PIL import Image
image1=Image.open('D:\\training_data\\used\\cifar-10-batches-py\\test\\1_猫.png')
image2=Image.open('D:\\training_data\\used\\cifar-10-batches-py\\test\\2_船.png')
fig=plt.figure(figsize=(8,4))
ax=fig.add_subplot(121,title='image1')
ax.imshow(image1)
ax=fig.add_subplot(122,title='image2')
ax.imshow(image2)
imshow
用于显示图片,默认是会显示坐标轴和刻度的,可通过Axes.axis('off')
关闭。
4. 基本图形patch
import matplotlib.patches as patches
from matplotlib.collections import PatchCollection
fig=plt.figure(figsize=(9,3))
ax=fig.add_subplot(121,title='Rectangle')
rects=[]
x=[1.5,3.5,5.5,]
y=[3,4.5,3]
for i in range(3):
rect=patches.Rectangle((x[i],y[i]),3,3)
rects.append(rect)
pc=PatchCollection(rects,linewidth=1,edgecolor='r',facecolor='none')
#ax.add_patch(rect)
ax.add_collection(pc)
ax.set_xlim([0,10])
ax.set_ylim([0,10])
ax=fig.add_subplot(122,title='Ellipse')
ells=[]
for i in range(5):
ell=patches.Ellipse((5,5),6,3,angle=i*36)
ells.append(ell)
pc=PatchCollection(ells,facecolor='g',alpha=0.5)
#ax.add_patch(ell)
ax.add_collection(pc)
ax.set_xlim([0,10])
ax.set_ylim([0,10])
绘制基本图形和相应集合需要导入
patches
和PatchCollection
。
patches
提供了各种图形的构造:
Rectangle
是矩形类,第1个参数xy
设置左下角顶点的坐标,第2,3个参数width
,height
设置宽度和高度,第4个参数angle
设置旋转角度;
Ellipse
是椭圆类,第1个参数xy
设置椭圆中心的坐标,第2,3个参数width
,height
设置横轴和竖轴的长度(直径),第4个参数angle
设置旋转角度。
PatchCollection
用于构造patches
集合并设置通用的拓展参数:
linewidth
参数设置边缘线宽;
edgecolor
参数设置边缘颜色;
facecolor
参数设置填充颜色,facecolor='none'
可以设置不填充(在创建图形类时,fill=False
也能设置不填充);
alpha
参数设置透明度。
add_patch
用于向Axes
中添加单个图形;
add_collection
用于向Axes
中添加图形集合;
Axes.patches
可以查看Axes
下的所有Patch
绘图对象;
Axes.collections
可以查看Axes
下的所有绘图集合。
5. 数据表格table
data=np.array([[1,2,3],[4,5,6],[7,8,9]])
row_labels=['row1','row2','row3']
row_colors=plt.cm.BuPu(np.linspace(0, 0.5, len(row_labels)))
col_labels=['col1','col2','col3']
col_index=np.arange(3)
fig=plt.figure()
ax=fig.add_subplot(111,title='table')
for i in range(len(row_labels)-1,-1,-1):
ax.bar(col_index,data[i],color=row_colors[i],linewidth=0.5,edgecolor='k')
ax.table(cellText=data,
rowLabels=row_labels,
rowColours=row_colors,
colLabels=col_labels,
loc='bottom')
ax.set_xticks([])
table
方法用于添加表格:
cellText
参数设置单元格数据,二维序列类型,默认None
;
cellColors
参数设置单元格颜色,二维序列类型,默认None
;
cellText
和cellColors
两个参数至少有一个要赋值;
cellLoc
参数设置单元格位置,默认'right'
;
colWidths
参数设置列宽,一维序列类型,可选;
rowLabels
参数设置行标签,一维序列类型,可选;
rowColors
参数设置行标签颜色,一维序列类型,可选;
rowLoc
参数设置行标签位置,默认'left'
;
colLabels
参数设置列标签,一维序列类型,可选;
colColors
参数设置列标签颜色,一维序列类型,可选;
colLoc
参数设置列标签位置,默认'center'
;
loc
参数设置表格位置,默认bottom
;
bbox
参数设置方框样式,可选。
更详细的设置可以自行创建Table
对象,通过Axes.add_table
方法添加;
Axes.tables
可以查看Axes
下的所有Table
绘图对象。