python学习—可视化工具matplotlib


前几天我们在学习神经网络时,绘制出了cost函数曲线和accuracy曲线,我们是用python的matplotlib工具绘制的曲线。今天来学习一下。

1)介绍

matplotlib是一个用于创建出版质量图表的桌面绘图包(主要是2D方面)。如果结合使用一种GUI工具包(如IPython),matplotlib还具有诸如缩放和平移等交互功能。它不仅支持各种操作系统上许多不同的GUI后端,而且还能将图片导出为各种常见的矢量(vector)和光栅(raster)图:PDF、SVG、JPG、PNG、BMP、GIF等。

2)一个图上绘制一条曲线

一元线性函数显示,示例代码如下:

>>> import matplotlib.pyplot as plt
>>> import numpy as np
#将-1到1进行50等分 >>> x=np.linspace(-1,1,50) >>> y=x*3+1 >>> plt.plot(x,y) [<matplotlib.lines.Line2D object at 0x000000038687E5C0>] >>> plt.show()

输出结果如下:

python学习—可视化工具matplotlib

3)一张图上绘制多条曲线

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-1,1,50)
y1=x*2+1
y2=x**2+1
plt.figure(num=3,figsize=(8,5))
plt.plot(x,y2)
plt.plot(x,y1,color='green',linewidth=1.0,linestyle='--')
#x的范围
plt.xlim((-2,2))
#y的范围
plt.ylim((-2,2))
new_ticks=np.linspace(-1,2,5)
plt.xticks(new_ticks)
plt.yticks([-2,-1.8,-1,1.22,3],[r'$really\ bad$','$bad$',r'$normal$',r'$good$','$really\ good$'])
#得到现在x轴
ax=plt.gca()
#绑定x轴y轴
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
#设置标签 plt.xlabel("This is x") plt.ylabel("This is y") plt.show()

如下:

4)同时显示两个图

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> x=np.linspace(-1,1,50)
>>> y1=x*3+1
>>> y2=x**2+1
>>> plt.figure()
#再申请一个图像1
>>> plt.plot(x,y1)
#图像号码是3,图像大小是8,5
>>> plt.figure(num=3,figsize=(8,5))
#图像2
>>> plt.plot(x,y2)
#设置图线颜色和宽度 样式
>>> plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
>>> plt.show()

5)散点图(scatter diagram)

示例程序如下:

import matplotlib.pyplot as plt
import numpy as np
n=1024
x=np.random.normal(0,1,n)
#标准正态分布,size=n
y=np.random.normal(0,1,n)
t=np.arctan2(x,y)
plt.scatter(np.arange(5),np.arange(5))
#tick默认
plt.xticks(())
plt.yticks(())
plt.show()

输出结果:

6)条形图(bar diagram)

示例程序:

import matplotlib.pyplot as plt
import numpy as np
n=12
X=np.arange(n)
#生成随机数y1,y2 最大1.0 最小0.5 12 左闭右开 输出样本数目为12
Y1=(1-X/float(n))*np.random.uniform(0.5,1.0,n)
Y2=(1-X/float(n))*np.random.uniform(0.5,1.0,n)

plt.figure(figsize=(12,8))
#条形颜色 plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white') plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')
#ha 水平方向 va 垂直方向 for x, y in zip(X,Y1): plt.text(x, y + 0.05, '%.2f' % y, ha='center', va='bottom') for x, y in zip(X,-Y2): plt.text(x, y-0.05, '%.2f' % y, ha= 'center', va='top') plt.xlim(-.5,n) plt.xticks(()) #tick 默认 plt.ylim(-1.25,1.25) plt.yticks(()) plt.show()

输出结果如下:

7)3D图形

示例程序:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
#设置图像大小
fig = plt.figure(figsize=(12, 8))
ax = Axes3D(fig)
# 设置X,Y的范围,以及步长
X = np.arange(-4,4,0.25)
Y = np.arange(-4,4,0.25)
#生成采样点网格
X,Y = np.meshgrid(X, Y)
#求平方根
R = np.sqrt(X**2 + Y**2)
# Z轴高度
Z = np.sin(R)
# 绘图
# rstride(row)和cstride(column)表示的是行列的跨度
ax.plot_surface(X, Y, Z,
rstride=1, # 行的跨度
cstride=1, # 列的跨度
cmap=plt.get_cmap('rainbow') # 颜色映射样式设置
)
# offset 表示距离z的轴距离 contourf函数画曲线有填充效果等值线图,contour函数没有填充效果
ax.contour(X, Y, Z, zdir='z', offest=-2, cmap='rainbow')
#设置z的范围
ax.set_zlim(-3, 2)
plt.show()

输出结果:

python学习—可视化工具matplotlib