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()
输出结果如下:
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()
输出结果: