python绘图模块matplotlib
1、绘制图形
(1)函数原型:matplotlib.pyplot.plot(* args,** kwargs )
其中:args是一个可变长度参数,允许多个带有可选格式字符串的x,y对。例如,以下每一项都是合法的:
plot(x,y) #使用默认线条样式和颜色
plot(x,y,'bo') # 绘制x和y使用蓝色圆圈标记
plot(y) #绘制y,使用x作为索引数组,x为自然数0...N
plot(y,'r +') #同上,但加上红色
支持以下颜色缩写:
字符 颜色
'B' 蓝色
'G' 绿色
'R' 红
'C' 青色
'M' 品红
'Y' 黄色
‘k’ 黑色
'W' 白色
接受以下格式字符串字符来控制线条样式或标记:
字符 描述
'-' 实线样式
'--' 虚线样式
'-.' 点划线样式
':' 虚线样式
'.' 点标记
',' 像素标记
'o' 圈子标志
'v' 下三角标记
'^' 上三角标记
'<' 左三角标记
'>' 右三角标记
'1' 三叉标记1
'2' 三叉标记2
'3' 三叉标记3
'4' 三叉标记4
's' 方形的标记
'p' 五角大楼标记
'*' 星标记
'h' 六边形1标记
'H' 六边形2标记
'+' 加号标记
'x' x标记
'D' 钻石标记
'd' 细长钻石标记
'|' 竖线标记
'_' 横线标记
(2)最简单的情况
import numpy as np
import matplotlib.pyplot as plt
x = [1,2,3,4] # 横轴
y = [5,6,7,8] # 纵轴
plt.title("pyplot") # 设置标题
plt.xlabel("time(s)") # 横轴标题
plt.ylabel("value(m)",fontsize=14, color='red') # 纵轴标题,可以设置字体大小和字体颜色
plt.figure(figsize=(7,4)) # 设置画布大小
plt.plot(x, y) # 画图
plt.axis('tight') # 坐标轴适应数据量
plt.show()
(3)设置横轴坐标最大最小,增加网格
plt.grid(True) #增加格点
plt.xlim(-1,20) # 设置x轴的最大和最小值
plt.ylim(1,10) # 设置纵轴的最大和最小值
# 或者用plt.axis([0, 6, 0, 20]) # 设置坐标轴长度,x:0-6,y:0-20
plt.plot(x, y) # 画图
plt.show()
(4)在一个画布中绘制多张图并且设置图例、添加注释
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0., 5., 0.2)
# 红色的破折号,蓝色的方块,绿色的三角形
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
label = ["First", "Second", "Third"]
plt.legend(label, loc = 0, ncol = 2)
# loc:设置图例显示的位置,
'best' : 0, (only implemented for axes legends)(自适应方式)
'upper right' : 1,
'upper left' : 2,
'lower left' : 3,
'lower right' : 4,
'right' : 5,
'center left' : 6,
'center right' : 7,
'lower center' : 8,
'upper center' : 9,
'center' : 10,
# ncol:设置列的数量,使显示扁平化,当要表示的线段特别多的时候会有用
plt.text(1, 80, "function: y = x * x", size = 15, alpha = 0.2) # 添加文本注释
# 第一个参数是x轴坐标
# 第二个参数是y轴坐标
# 第三个参数是要显式的内容
# alpha 设置字体的透明度
# family 设置字体
# size 设置字体的大小
# style 设置字体的风格
# wight 字体的粗细
# bbox 给字体添加框,alpha 设置框体的透明度, facecolor 设置框体的颜色
plt.yticks([10,30,100]) # 人为设定坐标的刻度值
plt.show()
(5)绘制多个子图
x = [1,2,3,4] # 横轴
y = [5,6,7,8] # 纵轴
plt.subplot(211) #两行一列,第一个图
plt.plot(x, y) # 画图
plt.subplot(212) #两行一列.第二个图
plt.plot(x, y) # 画图
plt.show()
x = [1,2,3,4] # 横轴
y = [5,6,7,8] # 纵轴
plt.subplot(121) #两行一列,第一个图
plt.plot(x, y) # 画图
plt.subplot(122) #两行一列.第二个图
plt.plot(x, y) # 画图
plt.show()
(6)绘制条形图
x = [1,2,3,4] # 横轴
y = [5,6,7,8] # 纵轴
plt.bar(x,y,width=0.5, color='g') # width为条形宽度,color为颜色
plt.show()
(7)绘制散点图
x = [1,2,3,4] # 横轴
y = [5,6,7,8] # 纵轴
plt.scatter(x,y)
plt.show()
(8)绘制直方图
调用方式:
n, bins, patches = plt.hist(arr, bins=50, normed=1, facecolor='green', alpha=0.75)
hist的参数非常多,但常用的就这五个,只有第一个是必须的,后面四个可选:
arr: 需要计算直方图的一维数组
bins: 直方图的柱数,可选项,默认为10,柱数越多,则把坐标轴区间(arr中的最小值到最大值的区间)切分得越窄
normed: 是否将得到的直方图向量归一化,如果为1,则直方图的每个柱的纵坐标代表该柱切分数组中的数据个数在总个数中的概率,如果为0,则直方图的每个柱的纵坐标代表该柱切分数组中的数据个数,默认为0.
facecolor: 直方图颜色
alpha: 透明度
返回值 :
n: 直方图向量,由是否归一化参数设定。为一个数组,如果归一化,每个元素代表一个柱中的数据个数占总数的比率,如果没有归一化,每个元素代表一个柱所切分的数据个数。
bins: 返回各个bin的区间范围。
patches: 返回每个柱里面包含的数据,是一个list。
实例:
import numpy as np
import matplotlib.pyplot as plt
x =np.random.randn(1000) # 随机生成1000个范围在[-1,-1]中并且符合高斯分布的数
n, bins, patches = plt.hist(x, bins=50, normed=1, facecolor='green', alpha=0.75)
plt.show()
n, bins, patches = plt.hist(x, bins=50, normed=0, facecolor='green', alpha=0.75)
plt.show()
2、显示图像
(1)显示单张图像
plt.imshow(rdata[0]) # 其中rdata[0]是一个 n * n * 3的三维矩阵
plt.show()
(2)显示多张图像
fig = plt.figure()
ax = fig.add_subplot(331)
ax.imshow(rdata[0])
ax = fig.add_subplot(332)
ax.imshow(rdata[1])
ax = fig.add_subplot(333)
ax.imshow(rdata[2])
ax = fig.add_subplot(334)
ax.imshow(rdata[3])
ax = fig.add_subplot(335)
ax.imshow(rdata[4])
ax = fig.add_subplot(336)
ax.imshow(rdata[5])
ax = fig.add_subplot(337)
ax.imshow(rdata[6])
ax = fig.add_subplot(338)
ax.imshow(rdata[7])
ax = fig.add_subplot(339)
ax.imshow(rdata[8])plt.show()