在使用Python处理数据时,经常用到画图函数,其中有很多功能或常用、或偶尔用,很难全部记住。
因此,在这里开一篇博客,作为备忘,并持续更新、补充。
说明:此博客仅作备忘,记录一些常用功能,不作大而全的查询手册用。
目录
1、图片整体设定
1.1、大图基本属性
2、子图
2.1 plt.subplot()方法
2.2 plt.subplots()方法
3、线型图样式
首先,导入必要的工具包:
import numpy as np
import matplotlib.pyplot as plt
接下来,分组记录各种用法:
1、图片整体设定
1.1、大图基本属性
通常在作图之前,我们需要调用figure方法来进行初步的图片属性设置,该方法定义为:
## Figures ##
def figure(num=None, # autoincrement if None, else integer from 1-N
figsize=None, # defaults to rc figure.figsize
dpi=None, # defaults to rc figure.dpi
facecolor=None, # defaults to rc figure.facecolor
edgecolor=None, # defaults to rc figure.edgecolor
frameon=True,
FigureClass=Figure,
clear=False,
**kwargs
):
各个参数的解释:
- num:图片的编号,如果不指定,则从1开始自动递增;
- figsize:图片长宽大小,如果不指定,则系统默认一个大小;
- dpi:图片的DPI大小,如果不指定,则系统默认一个大小;
- facecolor:图片背景颜色,如果不指定,则默认一个颜色;
- frameon: 是否画出图形框,即包裹子图的外部框,默认TRUE;
- FigureClass:matplotlib.figure.Figure的一个派生类,可自选图形实例;
- clear:如设为TRUE,则在图片存在时,进行清理,默认FALSE;
使用示例(仅用前四个属性):
fig = plt.figure(num=1,figsize=(6,4),dpi=100,facecolor='grey')
x = np.linspace(-20,20,2000)
plt.plot(x)
Notes:在绘制具体图形时,如不指定大图属性,也可以画图,这时会自动调用系统默认的大图设置。
1.2、给图片加标题
如果只有一个子图,此时加标题可用:
plt.title('tittle name')
可如果有多于一个子图时,此方法只能给对应的子图加标题,不能给整个大图加标题;这个时候,可以使用:
fig.suptitle('tittle name')
完整示例:
fig = plt.figure(num=1,figsize=(8,6),dpi=100,facecolor='grey',)
plt.subplot(211)
plt.plot(x)
plt.title('raw x')
plt.subplot(212)
plt.plot(x*x)
plt.title('x*x')
fig.suptitle('raw x & x*x')
2、子图
在一个图片中包含多个子图的形式非常常见,需要用到工具包中绘制子图的方法。
2.1 plt.subplot()方法
我们通常需要在一个大图中,绘制多个子图,这个时候可以用plt.subplot()方法。
该方法通过指定各个子图在大图中的分布来为每个子图开辟其所属空间,并且可以指定各个子图的颜色、投影属性。
其中,对各个子图的位置分布进行设定比较有意思,相当于是指定每行每列的子图个数,也即指定大图切割粒度,然后指定当前子图在这个行列划分下的次序。
举例说明:在一个大图上划分了2*3共6个子图,我们可以用“231”来表示第一个子图,“232表示第二个子图”...以此类推,可以指定所有子图。另外,我们有时候希望每个子图在大图中所占比例不同,比如有的子图独占大图上半区、下半区由两个子图共享,这样共有一大两小三个子图,这个时候,我们可以给每个子图指定不同的大图切割粒度。
一个简单示例:
# 均匀切割为2行1列,共两个子图
plt.subplot(211,facecolor='r')
plt.plot(x)
plt.subplot(212,facecolor='k')
plt.plot(x*x)
# 不均匀切割,其中第一个子图独占1/2,第2、3个子图各占1/4
plt.subplot(211,facecolor='r')
plt.plot(x)
plt.subplot(223,facecolor='k')
plt.plot(x*x)
plt.subplot(224,facecolor='k')
plt.plot(x*x*x)
上面右图:整体来说,其实相当于将大图切割为2*2的粒度,只不过第一个子图独占两个粒度;如果只针对第一个子图来说,在其看来大图的切割粒度是2*1,如果只针对第2/3个子图来说,在其看来大图的切割粒度为2*2。
Notes:plt.subplot()中的facecolor参数是Python3版本的用法,在Python2版本时,参数为axisbg。
2.2 plt.subplots()方法
plt.subplots()方法与plt.subplot()方法差不多,只不过前者需要指定返回值,然后根据返回的坐标轴对象数组分别绘制子图。
该方法的几个常用参数:
- nrows, ncols:子图的行列个数,也即大图的切割粒度为:nrows*ncols;
- sharex, sharey: x、y轴共享设置,默认为FALSE,如果设为TRUE,则子图共享对应轴;或者设置为{'none', 'all', 'row', 'col'};
- subplot_kw:坐标映射参数,可设定坐标轴的映射,如映射到极坐标等。
用法示例:
f, ax = plt.subplots(2, 2, sharex=True)
ax[0,0].plot(x, x)
ax[0,1].scatter(x, x*x)
ax[1,0].scatter(x, x*x*x)
ax[1,1].scatter(x, 2*x)
3、线型图样式
plt.plot(*args, **kwargs)函数,是Axes(_AxesBase)类的一个方法,该函数可以用于绘制线型图。
使用起来极其方便,可以指定一对同等长度的一维数组,也可以单独指定一个一维数组(此时将使用其索引作为x轴),同时可指定颜色、线型等参数。
调用示例:
plot(x, y) # plot x and y using default line style and color
plot(x, y, 'bo') # plot x and y using blue circle markers
plot(y) # plot y using x as index array 0..N-1
plot(y, 'r+') # ditto, but with red plusses
附上其控制线型、颜色的参数:
线型:
==============================
字符 描述
==============================
'-' 实线
'--' 虚线
'-.' 点实线
':' 虚线
'.' 点
',' 像素标记
'o' 实心圆
'v' 下三角
'^' 上三角
'<' 左三角
'>' 右三角
'1' tri_down marker
'2' tri_up marker
'3' tri_left marker
'4' tri_right marker
's' 正方形
'p' 五角星
'*' 星形
'h' 六角形1
'H' 六角形2
'+' 加号性
'x' X形
'D' 钻石
'd' 瘦-钻石
'|' 竖线
'_' 横线
================ ===============================
颜色:
=============
字符 颜色
=============
'b' 蓝
'g' 绿
'r' 红
'c' 蓝绿
'm' 品红
'y' 黄
'k' 黑
'w' 白
========== ========