import matplotlib.pyplot as plt
pyplot模块
plt.ion()
:打开交互模式plt.figure(num=None, figsize=None, dpi=None,
facecolor=None, edgecolor=None, frameon=True,
FigureClass=<class 'matplotlib.figure.Figure'>, **kwargs)
参数:
num:整数或者字符串,默认值是None。figure对象的id。如果没有指定num,那么会创建新的figure,id(也就是数量)会递增,这个id存在figure对象的成员变量number中;如果指定了num值,那么检查id为num的figure是否存在,存在的话直接返回,否则创建id为num的figure对象,并且如果num是字符串类型,窗口的标题会设置成num。
fsize:整数元组,默认值是None。表示宽、高的inches数。
dpi:整数,默认值为None。表示figure的分辨率
facecolor:背景颜色
edgecolor:边缘颜色
返回:
figure:Figure对象ax = plt.subplot(*args, **kwargs)
:
关键字参数:
facecolor:subplot的背景颜色
projection:
返回:
subplot(nrows, nclos, plot_number)#将figure划分成nrows行ncols列个子坐标。plot_number用来返回指定的subplot,从1开始,先横向后纵向
#当行、列和plot_number都小于10的时候,可以用下面的简单的调用形式来指定行列数及plot_number
subplot(211)
例子:
import matplotlib.pyplot as plt
# plot a line, implicitly creating a subplot(111)
plt.plot([1,2,3])
# now create a subplot which represents the top plot of a grid with 2 rows and 1 column.
#Since this subplot will overlap the
# first, the plot (and its axes) previously created, will be removed
plt.subplot(211)
plt.plot(range(12))
plt.subplot(212, facecolor='y') # creates 2nd subplot with yellow background
fig, ax = plt.subplots(nrows=1, ncols=1, sharex=False,
:
sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
创建一个figure和多个子图。
参数:
nrows,ncols:int类型,默认值为1,表示子图窗格数
sharex,sharey:bool或者{‘none’, ‘all’, ‘row’, ‘col’},默认值为False。控制x、y坐标轴的属性共享。当为True或者’all’表示在所有子图*享坐标轴;False或者’none’表示每个子图的坐标轴是独立的;’row’表示每个子图行会共享坐标轴;’col’表示每个子图列会共享坐标轴。
squeeze:bool,默认值为True。
subplot_kw:dict。保存的是传给add_subplot()
的参数
gridspec_kw:dict。
fig_kw:dict。
返回:
fig:matplotlib.figure.Figure对象,fig可以用于修改图片级别的属性。
ax:Axes对象或者Axes对象的数据。plt.axis(*v, **kwargs)
:获得或者设置坐标属性的便捷方法
plt.axis():返回当前坐标的范围[xmin, xmax, ymin, ymax]
plt.axis(v):设置x和y坐标的最大最下值,v=[xmin, xmax, ymin, ymax]
plt.axis('off'):去掉坐标轴和标签
plt.axis('equal'):
plt.axis('scaled'):
plt.axis('tight'):修改x、y坐标的范围让所有的数据显示出来
plt.axis('image'):
plt.imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None,
:
extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, hold=None, data=None, **kwargs)
参数:
X:array_like或者PIL图像对象,shape为[n,m]或[n,m,3]或[n,m,4]。表示要在当前axes中展示的图片。
cmap:Colormap。
aspect:[‘auto’ | ‘equal’ | ‘scalar’],’auto’表示调整图片的aspect比例使用axes,’equal’表示调整axes适应图片
返回:
img:AxesImage类型savefig(*args, **kwargs)
:保存当前figure。
参数:
fname:string(文件名)或者文件对象。当fname是文件对象时,需要指定format参数。
bbox_inches:只保存部分figure。如果为’tight’,试着从figure中去掉bbox。pause(interval)
:暂停一段时间。如果是动态figure,GUI事件会在暂停的时候执行;如果没有动态figure,或者是非交互后缀,执行time.sleep(interval)。
figure模块
Figure类:所有绘图元素的顶层容器
成员变量:
- axes:Figure对象的axes列表
成员函数:
axes模块
Axes类:包含大多数figure元素:Axis、Tick、Line2D、Text、Polygon等。还可以设置坐标轴。
成员函数:
ax.set_xticklabels(labels, fontdict=None, minor=False, **kwargs)
:设置x坐标上每个刻度的标签
参数:
labels:字符串序列
返回:ax.set_yticklabels([])
cla()
:清除当前axes。imshow(X, cmap=None)
:在axes上显示图片
参数:
X:array_like或者PIL图片,shape为[n,m], [n,m,3]或者[n,m,4]。
cmap:ColorMap,默认值为None。
-contour(*args, **kwargs)
:绘制轮廓
contour(Z):绘制数组Z的轮廓 contour(X, Y, Z):X、Y指明surface的(x,y)坐标 contour(Z, N):至多N个自动选择的level。 contour(Z, V):在序列V指定的值处绘制轮廓线,V必须是递增的
-
set_axis_off()
:把axis关闭
gridspec模块
import matplotlib.gridspec as gridspec
此模块用于指定subplot在figure的位置。
类GridSpec:指定subplot的框格
成员函数:
构造函数GridSpec(nrows, ncols, left=None, bottom=None, right=None, top=None, wspace=None, hspace=None, width_ratios=None, height_ratios=None)
:
参数:
nrows:框格的行数
ncols:框格的列数gs.update(wspace=0.05, hspace=0.05)
:更新当前值
示例:
import matplotlib.gridspec as gridspec
fig = plt.figure(figsize=(4, 4))
gs = gridspec.GridSpec(4, 4)
gs.update(wspace=0.05, hspace=0.05)
for i, sample in enumerate(samples):
ax = plt.subplot(gs[i])
plt.axis('off')
ax.set_xticklabels([])
ax.set_yticklabels([])
ax.set_aspect('equal')
plt.imshow(sample.reshape(28, 28), cmap='Greys_r')
实践
绘制confusion matrix
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
import numpy as np
def makeconf(conf_arr, model_name):
# makes a confusion matrix plot when provided a matrix conf_arr
# every row of conf_arr is normalized
norm_conf = []
for i in conf_arr:
a = 0
tmp_arr = []
a = sum(i, 0)
for j in i:
tmp_arr.append(float(j)/float(a))
norm_conf.append(tmp_arr)
fig = plt.figure()
plt.clf() #清除画布
ax = fig.add_subplot(111) #参数的意思是把画布分成1行1列,把图画在第1块(从上到下从左到右数起)。也可以写成 fig.add_subplot(1,1,1)
ax.set_aspect(1) #控制纵横比,1:1
res = ax.imshow(np.array(norm_conf), cmap=plt.cm.jet,
interpolation='nearest') #根据np array的数组绘制图,第二个参数是配色,有jet、gray
width = len(conf_arr)
height = len(conf_arr[0])
for x in xrange(width):
for y in xrange(height):
ax.annotate(str(conf_arr[x][y]), xy=(y, x),
horizontalalignment='center',
verticalalignment='center') #在每一块表上数字,第一个参数是要标上的字符串,第二个是坐标
cb = fig.colorbar(res) #在图的旁边绘制一个bar,展示颜色代表的数值
indexs = '0123456789'
plt.xticks(range(width), indexs[:width]) #x, y轴的坐标名
plt.yticks(range(height), indexs[:height])
# you can save the figure here with:
# plt.savefig("pathname/image.png")
plt.savefig("conf_matrix/{}_confusion_matrix.png".format(model_name))
if __name__=="__main__":
y = [1,0,1,1,1,0,0]
predicts = [1,1,0,1,0,1,0]
conf_matrix = confusion_matrix(y, predicts)
print conf_matrix
makeconf(conf_matrix, "test")
问题
想在绘制的图中显示中文信息,需要修改配置文件:/usr/local/lib/python2.7/dist-packages/matplotlib/mpl-data/matplotlibrc
把font.family和font.sans.seris前面的#去掉,并在font.sans.seris的第一个位置加上ubuntu已经安装的中文字体:Droid Sans Fallback。如果需要查看ubuntu下有哪些中文字体:
fc-list :lang=zh-cn
另外ubuntu中常见的中文字体是文泉驿微黑。